拷貝構造函數
在C++中,與類別名稱同名,且形參是本類別物件的參考類型的函數,叫做拷貝建構子(Copy Constrctor) ,與建構子一樣,當我們不主動定義的時候,系統也會自動產生一個,進行兩個物件成員之間對應的簡單賦值,用來初始化一個物件,如以下的情況:
#include<iostream>usingnamespacestd;#definePI3.1415classCircle{private:doubleR;public:Circle(doubleR);Circle(Circle&A);doublearea();doublegirth();};Circle::Circle&A);doublearea();doublegirth();};Circle::Circle&A);doublearea();doublegirth();};Circle::Circle(doubR){M <<endl;this->R=R;}Circle::Circle(Circle&A){cout<<CopyConstructor<<endl;this->R=AR;}doubleCircle::area(){returnPI*R*R;} doubleCircle::girth(){return2*PI*R;}intmain(){CircleA(5);CircleB(A);return0;}
本例定義了一個Circle圓形類,分別定義了帶參數的建構函數和拷貝建構函數,然後在主函數中定義A對象,並傳入初始值,呼叫帶參數的建構子。及定義B對象,透過A對象來初始化B對象。運行結果如下:
第一次定義的A物件呼叫帶參數的建構函數,第二個B物件由於是透過A物件來初始化,所以呼叫拷貝建構函數。
請大家也上機試驗。
大家可能會疑問,在開頭我們提到如果我們不主動定義拷貝建構函數,也會自動為我們產生一個,那我們為何還要自己定義呢?那是因為,預設的拷貝建構函數只是做簡單的賦值,有些情況則要出現問題,這就涉及到深拷貝與淺拷貝,我們在下一節給大家詳細介紹!