前言:拷貝建構函式是c++中的重點之一,在這裡對其知識進行乙個簡單的總結。
在c++中,對於內建型別的變數來說,在其建立的過程中用同型別的另乙個變數來初始化它是完全可以的,如:
1那麼對於自定義的資料型別來說,是否可以在該類的乙個物件建立時用該類的另乙個物件對其進行初始化呢?看下例:int value=100;2
int new_value=value;//
在變數new_value建立的同時用同型別的變數value來初始化它
1 #include2 #include3using
namespace
std;
4class
student //
建構函式
8 ~student(){}//
析構函式
9void message();//
列印物件的資訊
由上面的例子可以看出可以用乙個類的物件去對該類的另乙個正在建立的新物件進行初始化。而完成這個工作的就是類中的拷貝建構函式。所謂拷貝建構函式是一種特殊的建構函式,它由編譯器呼叫來完成一些基於同一類的其他物件的構建及初始化。如果程式設計者在編寫自定義的類時沒有自定義拷貝建構函式,那麼編譯器會在類中定義乙個預設的拷貝建構函式。
語法:類名(const 類名 &物件名)1 #include2 #include3using
namespace
std;
4class
student //
建構函式
8student(const student& stu)
13 ~student(){}//
析構函式
14void message();//
列印物件的資訊
特別注意:
拷貝建構函式的函式名必須和類名相同,且其唯一的引數(物件的引用)是不可變的(const型別)
在c++中,有三種情況會使物件在建立時呼叫拷貝建構函式
當物件直接作為引數以值傳遞的方式傳遞給函式時,函式將呼叫類中的拷貝建構函式並將實參物件傳遞給該拷貝建構函式從而在記憶體中建立形參物件,該形參物件將在函式執行完畢後呼叫類的析構函式將其析構
1 #include2 #include3using
namespace
std;
4class
student
9 student(string name,int age):name(name),age(age)
12 student(const student&stu)
17 ~student()
20void message();//
列印物件的資訊
當物件以值傳遞的方式從函式返回時,函式會呼叫類中的拷貝建構函式並將要返回的物件傳遞給該拷貝建構函式從而在記憶體中建立乙個臨時物件,該臨時物件會在返回後(不管有沒有物件接收(拷貝)該臨時物件)立馬呼叫類中的析構函式進行析構。
1 #include2 #include3using
namespace
std;
4class
student
9 student(string name, int age) :name(name), age(age)
12 student(const student&stu)
17 ~student()
20void message();//
列印物件的資訊
當物件在建立過程中被同型別的其他物件進行初始化時,該物件會呼叫類中的拷貝建構函式並將對其初始化的物件作為實參傳遞給該類的拷貝建構函式,從而最終將本物件成功建立
1 #include2 #include3using
namespace
std;
4class
student
9 student(string name,int age):name(name),age(age)
12 student(const student&stu)
17 ~student()
20void message();//
列印物件的資訊
C 建構函式 拷貝建構函式
建構函式 class base private int m var 建構函式無返回值型別,函式名和型別相同。拷貝建構函式傳遞引數為引用。1 class base2 7 拷貝建構函式 8 base base ref m var ref m var 9 11 private 12 intm var 13...
建構函式 拷貝建構函式
建構函式可以分為三類 1 不帶引數的建構函式 在函式體中對資料成員賦初值,這種方式使該類的每乙個物件都得到同一組初值 2 帶引數的建構函式 如果使用者希望對不同的物件賦不同的初值,可以採用帶引數的建構函式。在呼叫不同物件的建構函式時從外面將不同的資料傳遞給建構函式,以實現初始化 3 複製建構函式 建...
建構函式 拷貝建構函式
person person 引用就是指標常量 所以person p person const p,引用所以一旦初始化指向某個位址,就不能在改變了。為什麼前面還要加const,因為拷貝建構函式的目的就是將乙個物件的所有屬性拷貝到另外乙個物件,這個物件的屬性不變,加上const 相當於 const pe...