#include
using
namespace
std;
class test
private:
static
int ctor_count; //only a declaration
};int test::ctor_count=0; // definition + initialization
int main()
以上**執行結果為:
ctor
copy ctor
copy ctor
assignment op
copy ctor
請按任意鍵繼續. . .
分析整個過程,test test;呼叫了預設的建構函式,
test test1=test;test1是乙個新的類例項,尚未定義,此時呼叫拷貝建構函式;
test test2(test);顯式地呼叫拷貝建構函式
test test3=test2=test1;這是乙個連續的賦值,但是這裡是先運算
test2=test1,兩個物件均已例項化,所以這裡呼叫的是賦值運算子。而test test3=test2,中test3未定義,所以這裡呼叫的是拷貝建構函式。
那麼是不是拷貝建構函式未定義時對於新物件的產生,就要使用賦值運算子呢?請看下面**:
#include
using
namespace
std;
class test
test& operator= (const test& r)
private:
static
int ctor_count; //only a declaration
};int test::ctor_count=0; // definition + initialization
int main()
拷貝建構函式與賦值運算子過載
拷貝建構函式 只有單個形參,該形參是對本類型別物件的引用 一般常用const修飾 在用已存在的類型別物件建立新物件時由編譯器自動呼叫。1.拷貝建構函式是建構函式的乙個過載形式 class date date const date d private int year int month int da...
拷貝建構函式與過載賦值運算子
注意 該作者部落格已遷移至 如果乙個建構函式的第乙個引數是自身類型別的引用,且任何額外的引數都有預設值,則此建構函式是拷貝建構函式。c premier裡的定義 拷貝建構函式應用的場景 預設拷貝建構函式 class ctest ctest void test ctest obj intmain 這個程...
拷貝構造與過載賦值運算子
編譯器預設的拷貝建構函式,發生的是memberwise initialization 成員逐一初始化 類的成員變數被逐一複製。而預設賦值運算子,也是逐一複製成員變數。一旦成員變數中,有程式設計師在heap開闢的空間 指標,new 使用預設拷貝建構函式就會引起淺拷貝和深拷貝的問題。include us...