關於構造,析構,拷貝建構函式,

2021-07-03 03:19:23 字數 1311 閱讀 7565

1.建構函式

2.析構函式

3.拷貝建構函式

4.賦值語句

5.位址過載運算子(取址符)

6.對const取物件的位址符

一.建構函式

1.關鍵字explicit

在建構函式前加上explicit時建構函式必須顯示呼叫

例如test是類名,有乙個test的建構函式,有兩個引數。若果加上關鍵字explicit的話不能寫成test(10),只能顯示地賦初值,如test(10,20)。

2.呼叫時間

建構函式被呼叫時往往是在構造了物件的時候。注:不知是在主函式裡構造物件時呼叫,若乙個函式裡是以構造的物件為引數,此時也呼叫了建構函式。總言之,無論在**,只要構造了物件,就一定會呼叫建構函式。

3.建構函式的作用

a.構造物件

b.初始化物件

c.型別轉換

《對c點做乙個說明》:若定義了乙個建構函式

test(int d=0):date(d)
主函式裡定義了乙個物件並對其初始化:

void main()

此時語句「y=10」實際上是發生了強制型別轉換,將乙個整數轉換成類的物件形式。

《關於型別轉換》

有乙個test類,主函式這樣描述的:

void main()

畫注釋的兩句是錯誤的,不允許這樣複製,等號兩邊型別不同。解決方法:可以過載int 型別,如下:

public:

operator int()

二.析構函式

1.當撤銷物件時,自動呼叫析構函式

2.析構函式不能過載,乙個類中只能有乙個析構函式

3.用new動態分配記憶體空間時,應顯示呼叫析構函式

三.拷貝建構函式

1.賦值和拷貝

test t=t1;

test t(t1);

此時是呼叫拷貝建構函式

test t;

t=t1;

此時是賦值,不呼叫拷貝建構函式

2.呼叫拷貝構造的三種情況

a.用乙個物件初始化頂乙個物件時

b.物件作為函式引數時

c.函式返回值是類的物件時

3.深拷貝和前拷貝

淺拷貝:只拷貝了乙個指標指向同一空間

深拷貝:拷貝了乙個指標並且還有乙份空間

另:若類的資料成員出現指標,一般需要重新編寫拷貝構造。

建構函式 拷貝建構函式 析構函式

1.如果定義了兩個預設建構函式,vc只回給出warning.2.如果有預設引數的預設構造,如果你給了第乙個預設的話 所有傳遞引數都要有預設植 否則報錯.不過如果是第乙個引數的預設值沒有給出的話,編譯器卻看不出問題,但是沒有 試過這種情況建構函式能不能正常工作.建構函式 用來初始化物件的資料成員,與類...

C 建構函式 拷貝構造 析構函式

建構函式 constructor 在例項物件時,系統自動呼叫,用來初始化物件的資料成員 建構函式宣告語法 類名 引數列表 建構函式注意點 include include using namespace std class computer 上面的建構函式也可以寫成引數列表初始化的形式 compute...

構造 析構 拷貝

析構函式 應用場景 淺拷貝 深拷貝 class person person int a 呼叫情況1.person p 呼叫了無參構造 person p 沒有呼叫了無參構造,呼叫情況2.person p1 new person 呼叫了無參構造 person p2 new person 呼叫了無參構造t...