今天做c++ primer的習題,被複製建構函式和賦值符的區別弄暈了。簡單地說,有一道題目如下描述:
class t1;
class t2 = t1;
我先看見有乙個等號,以為就是賦值符來做的,其實並不是這樣的。做乙個實驗好了:
[cpp]view plain
copy
class ctest
; ctest::ctest()
ctest::ctest(const ctest & arg)
ctest & ctest::operator = (const ctest & arg)
int main()
執行的結果如下:
constructor of ctest
copy constructor of ctest
copy constructor of ctest
assign function of ctest
一切都是很顯然的了。
總結如下:
複製建構函式與賦值操作符之間的區別
複製建構函式又稱拷貝建構函式,它與賦值操作符間的區別體現在以下幾個方面
1.從概念上區分:
複製建構函式是建構函式,而賦值操作符屬於操作符過載範疇,它通常是類的成員函式
2.從原型上來區分:
複製建構函式原型classtype(const classtype &);無返回值
賦值操作符原型classtype& operator=(const classtype &);返回值為classtype的引用,便於連續賦值操作
3.從使用的場合來區分:
複製建構函式用於產生物件,它用於以下幾個地方:函式引數為類的值型別時、函式返回值為類型別時以及初始化語句,例如(示例了初始化語句,函式引數與函式返回值為類的值型別時較簡單,這裡沒給出示例)
classtype a; //
classtype b(a); //呼叫複製建構函式
classtype c = a; //呼叫複製建構函式
而賦值操作符要求『=』的左右物件均已存在,它的作用就是把『=』右邊的物件的值賦給左邊的物件
classtype e;
class type f;
f = e; //呼叫賦值操作符
4.當類中含有指標成員時,兩者的意義有很大區別
複製建構函式需為指標變數分配記憶體空間,並將實參的值拷貝到其中;而賦值操作符它實現的功能僅僅是將『=』號右邊的值拷貝至左值,在左邊物件記憶體不足時,先釋放然後再申請。當然賦值操作符必須檢測是否是自身賦值,若是則直接返回當前物件的引用而不進行賦值操作
區別建構函式,複製建構函式和賦值操作符函式
定義example類,該類給出了建構函式,複製建構函式和賦值操作符函式,各個成員函式輸出自己的函式名。主函式裡以不同方式使用example物件。作為非引用形參,引用形參,動態分配,函式返回值,賦值操作,作vector容器元素,以此研究建構函式,複製建構函式和賦值操作符函式。ifndef test h...
C 複製建構函式和賦值操作符的區別
賦值運算子 注意,不是 賦值建構函式 和拷貝建構函式都是用已有的物件來建立另乙個物件。不同之處在於 拷貝建構函式是生成乙個全新的物件,即 a a b 這才是c 風格的初始化 a a b 注意,這種風格只是為了與c相容 在這之前a物件是不存在的,或者說還沒有構造好。賦值operator 是兩個物件都已...
C OOP 複製建構函式和賦值操作符
賦值建構函式 賦值操作符 include include include using namespace std class sales item sales item const std string book isbn book units sold 0 revenue 0.0 賦值建構函式 如...