複製建構函式,又稱拷貝建構函式。
是一種特殊的建構函式,它在建立物件時,是使用同一類中之前建立的物件來初始化新建立的物件。拷貝建構函式通常用於:
如果在類中沒有定義拷貝建構函式,編譯器會自行定義乙個。如果類帶有指標變數,並有動態記憶體分配,則它必須有乙個拷貝建構函式。拷貝建構函式的最常見形式如下:
classname (
const classname &obj)
a&
operator=(
const a& obj)
語句「classa obj2; obj2 = obj1;「 和語句「classa obj2 = obj1;」在呼叫函式上是有區別的:前者第一句是物件obj2的宣告及定義,呼叫類classa的無參建構函式,所以「obj2 =所以:obj1;」一句是在物件obj2已經存在的情況下,用obj1來為obj2賦值,呼叫的是賦值運算子過載函式;而後者,是用obj1來初始化obj2,呼叫的是拷貝建構函式。關於拷貝建構函式的語句樣式為「classa(const classa& cls)」
a obj1;
a obj2;
obj2 = obj1;
//呼叫賦值操作符過載函式
//而a obj3 = obj1;
//呼叫複製建構函式,
//相當於 a obj3(obj1);
測試環境:vs2013
class
student
~student()
//複製建構函式
student
(const student& s)
//賦值操作符過載
student&
operator
=(student& s)};
student fun1
(student s)
intmain
(void
)//結果如下:
建構函式 main:s1 0x004ff97f
建構函式 main:s2 0x004ff973
複製建構函式 fun1按值傳參s1 0x004ff868
建構函式 fun1中的s2 0x004ff83b
複製建構函式 fun1返回物件 0x004ff89b
析構函式 ~
0x004ff83b 析構fun1中的s2物件
析構函式 ~
0x004ff868 析構fun1按值傳參的s1物件
賦值操作符過載
析構函式 ~
0x004ff89b 賦值後析構fun1返回的臨時物件
析構函式 ~
0x004ff973 析構main中的s1物件
析構函式 ~
0x004ff97f 析構main中的s2物件
C 複製建構函式與過載賦值操作符
c 拷貝建構函式 深拷貝,淺拷貝 c 中複製建構函式與過載賦值操作符總結 深拷貝和淺拷貝的區別 對深拷貝與淺拷貝的再次理解 禁止使用類的copy建構函式和賦值操作符 拷貝建構函式中的陷阱 在c 中建立乙個類,這個類中肯定會包括建構函式 析構函式 複製建構函式和過載賦值操作。複製建構函式是一種特殊的建...
複製建構函式與賦值操作符
乙個類裡是否需要複製建構函式?有時候答案是 是 如果你的類在建構函式裡分配了資源,則可能需要乙個顯式的複製建構函式來管理資源。有析構函式的類通常用析構函式來釋放建構函式分配的資源,這通常也說明需要乙個複製建構函式。如果需要複製建構函式,則多半需要乙個賦值操作符。類x的賦值由x operator 來定...
轉換建構函式 複製建構函式 操作符過載
用轉換建構函式可以將乙個指定型別的資料轉換為類的物件 但是不能反過來將乙個類的物件轉換為乙個其他型別的資料 例如將乙個complex類物件轉換成double型別資料 c 提供型別轉換函式 type conversion function 來解決這個問題 型別轉換函式的作用是將乙個類的物件轉換成另一型...