/*
copy建構函式的呼叫 時機1 時機2
*/#if 1
class test4
test4(int a)
test4(int a, int b) //有引數建構函式 //3種方法
//賦值建構函式 (copy建構函式) 作用完成物件的初始化
賦值建構函式的呼叫 時機3
*/#if 1
class location
//拷貝建構函式 完成物件的初始化
location(const location &obj)
~location()
int getx()
int gety()
private:
int x, y;
};//第三種 呼叫拷貝建構函式的時機
void f(location p) //引數是乙個元素
賦值建構函式的呼叫 時機4
*/#if 1
class location
//拷貝建構函式 完成物件的初始化
location(const location &obj)
~location()
int getx() int gety()
private:
int x, y;
};//第4種 呼叫拷貝建構函式的時機
location g()
//測試匿名物件的生命週期
void objplay2()
執行結果(測試匿名物件的生命週期)
g()函式 返回乙個元素
結論 1:函式的返回值是乙個元素(複雜型別的),返回乙個新的匿名物件(所以會呼叫匿名物件
的 copy建構函式)。
結論 2:有關匿名物件的去和留
如果用匿名物件 初始化 另乙個同型別的物件,匿名物件轉化為有名物件,匿名物件不會被析構掉
如果用匿名物件 賦值給 另乙個同型別的物件,匿名物件被析構
*/void objplay3()
執行結果(函式返回的匿名物件的去初始化另乙個物件)
執行結果(函式返回的匿名物件的去賦值另乙個物件)
執行結果:
C 拷貝建構函式的四種呼叫時機
假設定義了乙個類a class a void main void main void f a p void main g函式返回的是乙個元素 複雜型別的 返回的是乙個新的匿名物件 所以會呼叫匿名物件類的copy建構函式 a g void main 注意 1.只有乙個物件對另乙個同型別的物件進行初始化...
C 拷貝構造函式呼叫時機
class a 傳入乙個字串代表變數的名字 a string n name n a 拷貝建構函式a const a a 過載 運算子 a operator const a a friend ostream operator ostream os,const a a private string na...
C 拷貝建構函式的呼叫時機
include iostream using namespace std class test2 test2 int a test2 int a,int b 有參建構函式 兩個引數 test2 析構函式 test2 const test2 obj void printf void main31 in...