C 預設的六個函式

2021-08-22 06:18:51 字數 2350 閱讀 3369

(一)建構函式

1.建構函式:cmystring(){}

(1)函式名與類名相同 無返回值  

物件構造時系統自動呼叫相應的建構函式

建構函式可以過載 可以在類內或者類外定義(指定作用域即可)

(2)初始化列表比函式內初始化更高效

對於自定義型別,在初始化時系統會自動生成初始化列表,即系統會先走一遍初始化列表,

然後在呼叫函式體內的初始化,也就是初始化了兩遍;所以初始化列表更快速

(3)const修飾的常量,必須在定義時初始化

引用變數,必須在定義時初始化 並且只能初始化一次

沒有預設建構函式的自定義的成員變數

(4)應用程式可以自己提供建構函式,如果不提供 系統將呼叫預設的建構函式

在初始化物件的成員變數時,要注意在堆上分配記憶體的情況

(二)析構函式

2.析構函式:~cmystring(){}

函式名與類名相同 無返回值 無引數列表 

在函式名前加上'~'字元

析構函式主要是清理物件所占用的額外資源,而不是物件的記憶體空間

系統會在return之後自動呼叫析構函式  在出「}」時屬於主函式棧幀回退

析構函式不能過載

(三)拷貝建構函式

3.拷貝建構函式cmystring(const cmystring& rhs ){}

(1)用同型別已經存在的物件構造同型別的新的物件

(2)如果預設的拷貝建構函式會發生淺拷貝現象 需要自己提供

(3)拷貝構造函式引數不能值傳遞,必須傳引用

(4)值傳參的迴圈遞迴 cmystring(const cmystring rhs )

呼叫函式的步驟:先初始化形參,傳形參;

呼叫函式

eg:cmystring str1 = str2 --->cmystring str1(str2);

初始化形參:cmystring rhs = str2;

呼叫函式:cmystring(cmystring rhs);

初始化形參:cmystring rhs = str2;

呼叫函式:cmystring(cmystring rhs);

一直迴圈死遞迴下去;

(5)傳引用cmystring(const cmystring& rhs ){}

eg:cmystring str1 = str2 --->cmystring str1(str2);

引用str2物件,this指標指向新生成的物件str1,將引用的物件的內容拷貝乙份給this指標指向的新物件

(6)拷貝建構函式要避免淺拷貝現象

eg:cmystring str1 = str2

str2和str1都指向同一塊記憶體 如果兩者中任意乙個提前釋放資源,都會造成另乙個成為野指標

(7)系統缺省會提供 但是涉及到淺拷貝時需要應用程式自己提供

(8)傳參傳const的原因:不修改引用的物件的內容

(四)賦值運算子過載函式

4.賦值運算子過載函式:cmystring& operator=(const cmystring& rhs)

(1)用同型別已經存在的物件賦值給另乙個已經存在且型別相同的物件

(2)如果預設的賦值運算子過載函式會發生淺拷貝現象 需要自己提供

(3)五個不支援的運算子過載:sizeof/::/?:/./.*

(4)運算子過載後不能改變運算子的優先順序和結合性

(5)傳參傳const的原因:不修改引用的物件的內容

(五)取位址操作符的過載函式

cmystring *operator&()

(六)const修飾的取位址操作符的過載函式

const cmystring* opreator&()const

**示例如下:

//**如下:c++預設的六個函式

/* class cmystring

const cmystring* operator &()const

void show()

private:

char *m_pdata;

};//建構函式

cmystring::cmystring( char *pdata )

//拷貝建構函式:用同型別已經存在的物件構造同型別的新物件

cmystring::cmystring(const cmystring& str)

//賦值運算子過載函式:用乙個同型別已經存在的物件複製給另乙個同型別已經存在的物件

cmystring& cmystring:: operator = ( const cmystring &str)

//析構函式:釋放物件所占用的額外資源 比如堆上資源

cmystring::~cmystring()

}*/

C 的六個預設函式

c 有六個預設函式 分別是 1 default建構函式 2 預設拷貝建構函式 3 預設析構函式 4 賦值運算子 5 取值運算子 6 取值運算子const 這兩個類的效果相同 class person class person deafault建構函式 person const person 預設拷貝...

c 中的六個預設函式

1.c 三大特徵 封裝 繼承 多型 1.public 任意位置訪問 2.protected 本類,子類類中訪問 3.private 本類類中訪問 2.struct class 3.this thiscall 類中普通的成員方法中有預設的引數 this this student const 普通成員方...

C 中六個預設的函式

c 物件導向特點 繼承 封裝 多型 任務是初始化物件的記憶體空間。注意 新物件被建立,由編譯器自動呼叫建構函式,且在物件的生命週期之內只調動一次。不可以手動呼叫,類的成員方法依賴物件呼叫,即在建構函式完成後 建構函式的名字和類名相同,沒有返回值 建構函式可以過載,實參決定了呼叫哪個建構函式 沒有顯示...