我們知道,在c++中每乙個類都有乙個預設的建構函式,析構函式和拷貝建構函式。
對於兩個物件p1,p2,實現語句p2 = p1就相當於在呼叫預設的拷貝建構函式,把p1物件的每個屬性值逐個複製給物件p2
的每個屬性。所以拷貝建構函式主要用於物件之間的相互賦值。
當然,對於拷貝建構函式我們可以自定義,一般形式如下:
class_name(const class_name &object)
這裡我們可以看出拷貝建構函式的引數是const引用型別的,用const是為了更加安全,防止物件被更改,而這裡是
必須要用引用型別的,如果不用會導致無窮遞迴,因為將物件的實參傳遞給形參要呼叫一次複製構造,但是這次呼叫
同樣需要一次複製構造,所以就遞迴了。
至於呼叫拷貝建構函式,我們可以分兩種情況呼叫:顯式呼叫和隱式呼叫。下面通過point類的例子來說明。
#include #include #include using namespace std;
class point
//拷貝建構函式
point(const point &t)
void print()
void reset(int x,int y)
//拷貝建構函式
point(const point &t)
void print()
執行上面的程式,我們發現輸出是:
得到這個結果是應該的,因為對於指標變數p1和p2都指向同一塊記憶體空間。那麼我們只要改變乙個變數的值,那麼另乙個也
會改變。
那麼如果我們把主函式內改為:
int main()
結果為:
這樣可以看出對變數p1的修改不影響p2的值。
所以對於動態資料成員,進行深拷貝的時候,要重新分配額外的空間。如下操作:
#include #include #include using namespace std;
class student
//深拷貝
student(const student &t)
void print()
{cout<
拷貝建構函式,預設拷貝建構函式
拷貝建構函式,預設拷貝建構函式 1.c 的預設拷貝建構函式,從深度拷貝和淺拷貝說起 c 類的預設拷貝建構函式的弊端 c 類的中有兩個特殊的建構函式,1 無參建構函式,2 拷貝建構函式。它們的特殊之處在於 1 當類中沒有定義任何建構函式時,編譯器會預設提供乙個無參建構函式且其函式體為空 2 當類中沒有...
建構函式 拷貝建構函式
建構函式可以分為三類 1 不帶引數的建構函式 在函式體中對資料成員賦初值,這種方式使該類的每乙個物件都得到同一組初值 2 帶引數的建構函式 如果使用者希望對不同的物件賦不同的初值,可以採用帶引數的建構函式。在呼叫不同物件的建構函式時從外面將不同的資料傳遞給建構函式,以實現初始化 3 複製建構函式 建...
建構函式 拷貝建構函式
person person 引用就是指標常量 所以person p person const p,引用所以一旦初始化指向某個位址,就不能在改變了。為什麼前面還要加const,因為拷貝建構函式的目的就是將乙個物件的所有屬性拷貝到另外乙個物件,這個物件的屬性不變,加上const 相當於 const pe...