在繼承中,拷貝建構函式和賦值操作符表現的特性是不同的。
拷貝建構函式承擔著構造和拷貝雙重責任,無論什麼情況下都需要構造基類部分,賦值操作符則不同,其目標是已經構造好的物件,只需要賦值即可。
#include using namespace std;
class b
b(const b&b)
b& operator=(const b &b)
};class d: public b
private:
b b;
};int main()
示例**如上所示,其執行結果為:
b()
b()d()
----------------bb
----------------
b=b=
請按任意鍵繼續. . .
在示例中派生類還包括基類的物件,由結果看出:當派生類拷貝建構函式和賦值操作符為空時,會自動呼叫基類以及成員物件的建構函式和賦值操作符。
#include using namespace std;
class b
b(const b&b)
b& operator=(const b &b)
};class d: public b
d(const d&d)
d& operator=(const d &d)
private:
b b;
};int main()
示例**如上所示,其執行結果為:
b()
b()d()
----------------
b()b()
d----------------
d=請按任意鍵繼續. . .
由結果看出:拷貝建構函式會呼叫基類和成員物件的預設建構函式,並不會呼叫拷貝建構函式,賦值操作符則僅限於派生類自身函式
根據上述情形,完整的寫法為:
#include using namespace std;
class b
b(const b&b)
b& operator=(const b &b)
};class d: public b
d(const d&d):b(d), b(d)
d& operator=(const d &d)
private:
b b;
};int main()
結果為:
b()
b()d()
----------------bb
d----------------
b=b=
d=請按任意鍵繼續. . .
相比第一種情形,在呼叫基類和成員函式的拷貝函式和賦值操作符的基礎上增加了派生類函式的處理方式。 拷貝建構函式和賦值操作符
類有預設的建構函式 拷貝建構函式 析構函式 賦值操作運算子 和取位址運算子 預設的賦值操作運算子和預設的拷貝建構函式類似,對於每個非static成員,都是執行逐個成員賦值 memberwise assignment 同時也是按位賦值 bitwise copy 即,只是簡單地將每個類成員的記憶體中的直...
賦值操作符和拷貝建構函式
最近開發乙個專案,用到了單例模式,標頭檔案大概如下 class crecguard crecguard private void guard void unguard private critical section cs template class csingleton 禁止建構函式 csing...
子類的拷貝建構函式和賦值操作符
在定義子類的拷貝建構函式和賦值操作符時,基本的原則是子類一定要呼叫父類的相應函式,以下定義了父類base類和子類derived類來說明兩個函式的寫法 class base public base virtual base base const base rhs base operator base ...