傳智掃地僧課程學習筆記。
#include using namespace std;
class location
//copy建構函式 完成物件的初始化
location(const location & obj) //copy建構函式
~location()
int getx () int gety ()
private : int x , y ;
} ;//g函式 返回乙個元素
//結論1 : 函式的返回值是乙個元素 (複雜型別的), 返回的是乙個新的匿名物件(所以會呼叫匿名物件類的copy建構函式)
////結論2: 有關 匿名物件的去和留
//如果用匿名物件 初始化 另外乙個同型別的物件, 匿名物件 轉成有名物件
//如果用匿名物件 賦值給 另外乙個同型別的物件, 匿名物件 被析構
////你這麼寫**,設計編譯器的大牛們:
//我就給你返回乙個新物件(沒有名字 匿名物件)
location g()
//void objplay2()
//void objplay3()
{ //用匿名物件初始化m 此時c++編譯器 直接把匿名對轉成m;(扶正) 從匿名轉成有名字了m
location m = g();
printf("匿名物件,被扶正,不會析構掉\n");
cout<
location b = g();
此時直接轉正,
location b;
b = g();
此時返回值賦值乙份給b,g()本身返回的析構,
這種方式最好不用,要麼就直接初始化,像上面那樣,否則浪費一次拷貝構造和析構,
objplay2()中,
呼叫拷貝建構函式,產生匿名物件,
然後又沒人接,
所以又析構掉,
所以會有2次析構,
copy 賦值建構函式的4種呼叫時機or方法
第一種呼叫方法 demo include using namespace std class text text int a 有引數建構函式 text int a,int b 有引數建構函式,有三種呼叫方法 賦值建構函式,也叫copy建構函式 text const text obj text voi...
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...
複製建構函式的呼叫時機
每日心得 獨上高樓,望盡天涯路 日期 12.14 學習內容 複製建構函式的呼叫時機 重點 1 用已知變數 去複製 新定義的變數 2 值傳遞的方式給函式引數傳值 3 以值的方式返回區域性物件 4 呼叫複製建構函式後,系統不提供預設建構函式 定義類的時候,需要構造和複製都有 include using ...