C 建構函式講解

2021-09-11 14:49:14 字數 1567 閱讀 1238

建構函式的種類

如果建立乙個類沒寫建構函式,則系統會自動生成乙個預設建構函式,該建構函式沒有引數,函式為空,什麼都不做。只要寫了如下某乙個建構函式,則系統不會生成預設建構函式

1.無參建構函式

a()

2.一般建構函式

a(int v1, int v2)

3. 複製建構函式

a(const a& a)

若沒有顯式的寫建構函式,則系統會建立乙個預設複製建構函式,

4.型別轉換建構函式

a(int v)

根據指定型別的物件建立乙個本類物件

5.等號運算子過載

a &operator = (const a& a)

它不屬於建構函式,如果沒有顯式的寫=運算子過載,則系統會預設乙個,只做基本的拷貝工作。return *this是為了支援連等a=b=c,首先執行b=c,然後執行a=(b=c的返回值,即複製了c的b的物件)

建構函式使用用例

1.呼叫無引數建構函式

a a1,a2;

2.呼叫一般建構函式

a a3(1); 或者 a a3 = a(1);

3.把a3賦給a1

a1 = a3;

由於a1已經被提前建立,所以這裡不會呼叫任何建構函式,只呼叫=運算子過載函式

4.呼叫型別轉換建構函式

a2 = 1;

先呼叫轉換建構函式將1建立為乙個本類的臨時物件,再呼叫=運算子過載

5,呼叫拷貝建構函式

a  a4(a1); 或者 a a4 = a1;

這裡有區別於=運算子過載,因為a4並未提前建立,所以呼叫拷貝建構函式

深拷貝和淺拷貝

如上所述,如果沒有顯式的寫複製建構函式,則系統預設乙個,這個預設的的複製建構函式只是簡單的進行賦值,這時如果類裡有乙個成員變數是指標,或者有成員在建構函式中分配了資源,這時如果只進行簡單的賦值,則會出現新物件的指標所指向的位址與被拷貝物件的指標所指向的位址是同乙個位址,會造成錯誤,這就涉及到深拷貝和淺拷貝。

淺拷貝是指在物件複製時,只對物件中的成員變數進行賦值,預設賦值建構函式進行的就是淺拷貝;深拷貝是指物件複製時,對物件中的動態成員重新分配記憶體。

//示例

class person
}
//預設複製建構函式,只做模式拷貝
person(const person& p)
~person()
private:
char * m_pname;
}
void main()
導致man和woman的指標指向了同一位址,呼叫析構函式時,同一位址被delete了兩次,下面自己設計複製拷貝建構函式,實現深拷貝

person(const person& p)
}

C 類中的構造 析構函式 拷貝建構函式講解

類的建構函式 析構函式 拷貝建構函式的講解 一 建構函式 作用 建立物件時自動完成初始化。定義的格式 類名 形參表 什麼時候呼叫 1.物件說明語句 如 ca ca 2.new運算子建立動態物件 如 ca pa new ca 注意 如果類沒有顯示的給出建構函式,系統會自動給出乙個預設的 隱式的 建構函...

php建構函式例項講解

php官網定義 複製 如下 建構函式是類中的乙個特殊函式,當使用 程式設計客棧new 操作符建立乙個類的例項時,構造函dtwxupybst數將會自動呼叫。當函式與類同名時,這個函式將成為建構函式。如果乙個類沒有建構函式,則呼叫基類的建構函式,如果有的話,則dtwxupybst呼叫自己的建構函式 如a...

關於C 複製建構函式的實現講解

複製建構函式是一種特殊的建構函式,有一般建構函式的特性。它的功能是用乙個已知的物件來初始化乙個被建立的同類物件。複製建構函式的引數傳遞方式必須按引用來進行傳遞,請看例項 include include 程式設計客棧ng using namespace std class student 列印資訊函式...