ZZ 過載賦值運算子與拷貝建構函式的區別

2021-05-24 10:32:05 字數 829 閱讀 8238

比較運算子過載函式與拷貝建構函式的區別

#include

using namespace std;

#include

class namelist

namelist();//預設建構函式

namelist(namelist&);//拷貝建構函式

namelist& operator=(char *p );

namelist& operator=(  namelist& );    

void display()

~ namelist ()

}; namelist::namelist(namelist& a)//定義拷貝建構函式

namelist& namelist::operator=( char *p)//

//第乙個過載賦值運算子,完成用常量給物件賦值

namelist& namelist::operator=(  namelist& a)

//第二個過載賦值運算子,完成類物件之間的賦值

return *this;

}    

int main()

總結:拷貝建構函式發生在下面三種情況下:

在c++中,下面三種物件需要呼叫拷貝建構函式:

1) 乙個物件以值傳遞的方式傳入函式體;

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

3) 乙個物件需要通過另外乙個物件進行初始化;

深拷貝和淺拷貝的定義可以簡單理解成:如果乙個類擁有資源(堆,或者是其它系統資源),當這個類的物件發生複製過程的時候,這個過程就可以叫做深拷貝,反之物件存在資源但複製過程並未複製資源的情況視為淺拷貝。 

拷貝構造與過載賦值運算子

編譯器預設的拷貝建構函式,發生的是memberwise initialization 成員逐一初始化 類的成員變數被逐一複製。而預設賦值運算子,也是逐一複製成員變數。一旦成員變數中,有程式設計師在heap開闢的空間 指標,new 使用預設拷貝建構函式就會引起淺拷貝和深拷貝的問題。include us...

拷貝構造與賦值運算子過載(順序)

other l類型別 找到合適的建構函式生成該類的物件 如果找不到例項化物件失敗 隱式呼叫建構函式 顯示呼叫函式 無名物件 零時物件 賦值運算子過載函式 分為3步 第一步 判斷是不是自身賦值 防止失敗出錯 第二步 釋放this指標所指的 外部 空間的大小 第三步重新分配空間 拷貝資料 物件的生存週期...

拷貝建構函式與賦值運算子過載

拷貝建構函式 只有單個形參,該形參是對本類型別物件的引用 一般常用const修飾 在用已存在的類型別物件建立新物件時由編譯器自動呼叫。1.拷貝建構函式是建構函式的乙個過載形式 class date date const date d private int year int month int da...