C 複製建構函式,過載賦值運算子

2021-07-24 17:33:34 字數 1028 閱讀 9660

c++的複製建構函式, 賦值建構函式, 有時候會有點暈,下面總結一下:

首先來談一下複製建構函式:

**:

#includeusing namespace std;

#include#includeclass a

void fuction()

void show()

}; int main()

**解釋:

定義了乙個類,資料成員有字元指標,和整型數, 函式有建構函式,show函式,和釋放字元記憶體函式

執行一下程式,你會發現第二次呼叫a.show(),結果會是亂碼,關鍵在於a b = a;這句呼叫了預設複製

函式,這個函式做了什麼,通過亂碼的結果我們可想而知,free了b.str,而a.str也free掉了,所以兩個

字元指標指向同一記憶體,所以預設的複製建構函式功能:逐個複製非靜態成員資料;很硬性的

可以加乙個自己定義的複製建構函式,這樣就不是位址複製,值複製

**:

a(const a &a)

複製構造函式呼叫情況:

1:乙個物件以值傳遞的方式傳人函式體

2:乙個物件以值傳遞的方式從函式返回

3:乙個物件要通過另乙個物件進行初始化

賦值運算子:

將已有的物件賦給另乙個物件時,將使用過載的賦值運算子

**:

#includeusing namespace std;

#include#includeclass a

void fuction()

void show()

}; int main()

解釋:會發現結果同樣是亂碼, 不幸的是, 預設的運算子過載函式,跟預設的複製建構函式一樣,也是硬性的

複製非靜態成員資料,同樣我們需要重寫預設的運算子過載函式

**:

a & operator=(const a& a)

C 複製建構函式和賦值運算子過載函式

宣告乙個空的類testsize,sizeof testsize 為1,為其宣告建構函式和析構函式,依舊為1 建構函式不能使用關鍵字virtual,析構函式可以 一旦類中存在虛函式,就會為該類生成虛函式表,並在每乙個例項中新增乙個指向虛函式表的指標,從而大小為乙個指標大小,32位機器上為4,64位機器...

C 中拷貝(複製)建構函式和賦值運算子過載函式

c 中拷貝建構函式和賦值運算子過載函式何時呼叫?先看下面的程式 include using namespace std class d public d cout 呼叫d的無參建構函式 呼叫d的無參建構函式 呼叫d的拷貝建構函式 輔助函式 呼叫d的拷貝建構函式 呼叫d的析構函式 呼叫d的析構函式 呼...

複製建構函式和賦值運算子

進行c 類設計時,如果不對複製建構函式和賦值運算子進行重寫的話,編譯器會預設呼叫預設函式。預設的複製建構函式和賦值運算子會造成許多問題。先看下面一段 include include class my string int my string num string 0 my string my str...