以前我們的教程中討論過函式返回物件產生臨時變數的問題,接下來我們來看一下在函式中返回自定義型別物件是否也遵循此規則產生臨時物件!
先執行下列**:
//站點:www.***ev-lab.com
#include
using
namespacestd;
classinternet
; internet(char*name,char*address)
~internet()
protected:
charname[20];
charaddress[20];
}; internet tp()
void
main()
從上面的**執行結果可以看出,程式一共載入過析構函式三次,證明了由函式返回自定義型別物件同樣會產生臨時變數,事實上物件a得到的就是這個臨時internet類型別物件temp的值。
這一下節的內容我們來說一下無名物件。
利用無名物件初始化物件系統不會不呼叫拷貝建構函式。
那麼什麼又是無名物件呢?
很簡單,如果在上面程式的main函式中有:
internet ("中國軟體開發實驗室","www.***ev-lab.com");
這樣的一句語句就會產生乙個無名物件,無名物件會呼叫建構函式但利用無名物件初始化物件系統不會不呼叫拷貝建構函式!
下面三段**是很見到的三種利用無名物件初始化物件的例子。
//站點:www.***ev-lab.com
#include
using
namespacestd;
classinternet
~internet()
public:
charname[20];
charaddress[20];
}; void
main()
上面**的執行結果有點「出人意料」,從思維邏輯上說,當無名物件建立了後,是應該呼叫自定義拷貝建構函式,或者是預設拷貝建構函式來完成複製過程的,但事實上系統並沒有這麼做,因為無名物件使用過後在整個程式中就失去了作用,對於這種情況c++會把**看成是:
internet a("中國軟體開發實驗室","www.***ev-lab.com");
省略了建立無名物件這一過程,所以說不會呼叫拷貝建構函式。
kevin lynx//
最近我打算自己寫個鍊錶模板類~~然後在模扳上就遇到了個很奇怪的問題~~(祥見然後看到了以上的文章~~以下是我整理後的**,並附執行結果,程式在dev--c++下執行:
#include
#include
using namespace std;
class internet
int main()
C 類物件的複製 拷貝建構函式 深拷貝,淺拷貝
c 類物件的複製 拷貝建構函式 深拷貝,淺拷貝 進一步理解類成員的操作!站點 www.ev lab.com include using namespacestd classtest protected intp1 void main 普通物件和類物件同為物件,他們之間的特性有相似之處也有不同之處,類...
C 類物件的複製 拷貝建構函式
在學習這一章內容前我們已經學習過了類的建構函式和析構函式的相關知識,對於普通型別的物件來說,他們之間的複製是很簡單的,例如 int a 10 int b a 自己定義的類的物件同樣是物件,誰也不能阻止我們用以下的方式進行複製,例如 include using namespace std class ...
C 類物件的複製 拷貝建構函式
在學習這一章內容前我們已經學習過了類的建構函式和析構函式的相關知識,對於普通型別的物件來說,他們之間的複製是很簡單的,例如 int a 10 int b a 自己定義的類的物件同樣是物件,誰也不能阻止我們用以下的方式進行複製,例如 include using namespace std class ...