020 拷貝建構函式的四種呼叫時機

2021-08-27 20:47:59 字數 2186 閱讀 1315

/*

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...