1.拷貝構(gòu)造函數(shù)的形式
對于類X,如果它的函數(shù)形式如下
a) X&
b) const X&
c) volatile X&
d) const volatile X&
且沒有其他參數(shù)或其他參數(shù)都有默認(rèn)值,那么這個函數(shù)是拷貝構(gòu)造函數(shù)
X::X(const X&);是拷貝構(gòu)造函數(shù)
X::X(const X&,int val = 10);是拷貝構(gòu)造函數(shù)
2.一個類中可以存在超過一個拷貝構(gòu)造函數(shù)
class X {
public:
X(const X&);
X(X&); // OK
};
編譯器根據(jù)實際情況調(diào)用const拷貝構(gòu)造函數(shù)或非const的拷貝構(gòu)造函數(shù)
3.默認(rèn)的拷貝構(gòu)造函數(shù)行為
a)先調(diào)用父類的拷貝構(gòu)造函數(shù)
b)如果數(shù)據(jù)成員為一個類的實例,則調(diào)用該類的拷貝構(gòu)造函數(shù)
c)其他成員按位拷貝
4.默認(rèn)的賦值構(gòu)造函數(shù)行為
a)先調(diào)用父類的賦值構(gòu)造函數(shù)
b)如果數(shù)據(jù)成員為一個類的實例,則調(diào)用該類的賦值構(gòu)造函數(shù)
c)其他成員按位拷貝
5.提供顯示的拷貝和賦值構(gòu)造函數(shù)
基本的原則是子類一定要調(diào)用父類的相應(yīng)函數(shù),參考方式
Derive(const Derive& obj):Base(obj)
{
…...
}
Derive& operator =(const Derive &obj)
{
if ( this == &obj )
return *this;
//方式一
Base::operator =(obj);
//方式二
static_cast<Base&>(*this) = obj;
return *this;
}
另外當(dāng)你的成員變量有const或者引用,系統(tǒng)無法為你提供默認(rèn)的拷貝和賦值構(gòu)造函數(shù),我們必須自己處理這些特殊的情況
posted on 2012-08-31 17:13
梨樹陽光 閱讀(1740)
評論(0) 編輯 收藏 引用 所屬分類:
C++