當用乙個已初始化過了的自定義類型別物件去初始化另乙個新構造的物件的時候,拷貝建構函式就會被自動呼叫。也就是說,當類的物件需要拷貝時,拷貝建構函式將會被呼叫。以下情況都會呼叫拷貝建構函式:
乙個物件以值傳遞的方式傳入函式體
乙個物件以值傳遞的方式從函式返回
乙個物件需要通過另外乙個物件進行初始化。
補充說明源於c++ primer:
1、根據同一型別物件隱式或顯示初始化另乙個物件
2、複製乙個物件,作為實參傳入函式中
3、從函式返回時複製乙個物件
4、初始化順序容器中的元素
5、根據初始化列表初始化陣列元素
person p(q); //此時複製建構函式被用來建立例項p
person p = q; //此時複製建構函式被用來在定義例項p時初始化p
f(p); //此時p作為函式的引數進行值傳遞,p入棧時會呼叫複製建構函式建立乙個區域性物件,與函式內的區域性變數具有相同的作用域
p = q; //此時沒有複製建構函式的呼叫!
經典面試題:寫完整string類
string.h
#include #include #include using namespace std;
class string
; string(const char *p)
{ int slen = strlen(p)+1;
buf = new char[slen];
strcpy(buf, p);
buf[slen] = '\0';
coutstrcpy(this->buf, other.buf);
cout<<"diaoyong1"《列印結果:
haha
111diaoyong1
222diaoyong1
333diaoyong3
diaoyong2
444diaoyong3
diaoyong2
diaoyong1
hahahaha
C 拷貝構造
呼叫時機 使用乙個已經建立完的物件來初始化乙個新物件 class person person person const person p private string name intage int main person 構造 person 拷貝構造 person 析構 person 析構 值傳遞...
c 拷貝結構體 拷貝構造
用從不同型別的物件來構造物件complex double real 用實數來構造複數類 用相同型別的物件來構造物件complex complex const that 用另乙個複數來構造複數 注意 如果乙個類沒有定義拷貝建構函式,那麼編譯器會提供乙個預設拷貝建構函式,預設是public 定義乙個複數...
C 拷貝建構函式
1 什麼時候會用到拷貝建構函式?當任何你想影印東西的時候,而不管東西被影印成什麼樣子。即任何你想利用乙個已有的類例項給另乙個類例項賦值時,這種賦值可能是顯式的,也可能是隱式的 顯式 classa 1 class 2 隱式 函式的形參有用到類物件卻沒有用引用或傳址技術時 函式的返回值是乙個物件也沒有應...