類與物件 建構函式與析構函式

2021-10-04 00:23:56 字數 2692 閱讀 5203

建構函式是對物件的初始化,析構函式是對物件進行清理

由於類的資料成員不能在定義時進行初始化,所以需要一種特殊的函式幫助類的物件進行初始化操作

物件的初始化與物件的清理是必須要執行的兩個部分,所以如果不手動提供建構函式和析構函式,編譯器會自動提供這兩個函式用來完成上面的兩個部分的內容,但是編譯器自己給出的函式是空實現沒有函式體。

1.建構函式

作用:主要作用是在建立物件時,為物件的成員屬性賦值,建構函式由編譯器自行呼叫,無需手動呼叫

在乙個類中可以定義多個建構函式,以便可以對不同的類的物件提供不同的初始化方法,但是系統預設呼叫只會呼叫乙個,其他的需要手動呼叫。

語法:一般將建構函式定義為public

類名(引數可有可無)(類內寫法)

類名::類名(引數可有可無)(類外寫法)

date *d1 =

newdate

(2020,3

,18);

//建立物件(*date1)

//對於new運算子:new運算子動態分配記憶體後,返回指向新物件的指標,需要定義乙個指向該類物件的指標變數存放新物件指標,以便於對其進行訪問,一般結合delete使用,清除掉新開的空間

//上面的表示方法也可以寫成

date * date1;

date1 =

newdate

(2020,3

,18);

#include

using

namespace std;

class

date

date

(int y,

int m,

int d)

//有參建構函式

void

show_time()

};intmain()

初始化列表

初始化列表是一種新的初始化方法,利用括號法進行初始化

格式:functionname(引數列表):初始化列表

其中,初始化列表的形式改為:成員1(形參名1),成員n(形參名n)的方法

例如:

date

(int dd,

int mm,

int yy):d

(dd),m

(mm),y

(yy)

//感覺其實是有些麻煩的,所以可以使用其他方法進行初始化,但是有幾種情況時必須要使用引數初始化列表來對資料成員進行初始化的

//1. 資料成員為常量

//2.資料成員為引用型別

//3.資料成員是沒有無參建構函式的類的物件,就是類的物件中不能有無參建構函式,當然系統預設的建構函式也是無參的

//ps.對於初始化列表的方法,賦值的先後順序是按照類的宣告順序進行賦值的,與初始化成員列表出現的順序無關。

//這乙個程式是對列表初始化的例題介紹

//這乙個是關於:

//1.資料成員是常量

//2.資料成員是引用型別

#include

#include

using

namespace std;

class

demo

//分別對pointer和pi進行初始化成員列表法進行賦值

void

show_demo()

//下面這個建構函式是無法執行的,因為沒有對引用成員進行初始化

/* demo()

*/~demo()

};intmain()

2.析構函式

使用建構函式的初始化列表進行初始化

作用:主要作用是在物件銷毀前執行一些清理工作,也是由編譯器自動呼叫,至於具體應該這麼清理,由設計者自行定義

比如釋放成員(指標)所占有的儲存空間。

與建構函式一樣是類的共公有函式成員,乙個類中只能定義乙個析構函式(因為不能過載)

語法:~類名(不能有引數)(類內寫法)

~類名::類名(不能有引數)(類外寫法)

//這個程式是針對建構函式的初始化成員列表的舉例

//3.資料成員為沒有無參建構函式的類的物件

#include

using

namespace std;

class

demo1

//沒有無參建構函式的類

//乙個有參建構函式

~demo1()

//乙個簡單的析構函式的樣例

//private: 不能使用private,否則後面無法呼叫,因為是private型的只能在自己的類裡面訪問

int a;};

class

demo2

~demo2()

void

get(

)private

:int a;

demo1 poindemo1;

//資料成員poindemo1是沒有無參建構函式的類demo1的物件};

intmain()

類的建構函式與析構函式

建構函式 對於類物件成員的初始化我們始終是建立成員函式然後手工呼叫該函式對成員進行賦值的,那麼在c 中對於類來說有沒有更方便的方式能夠在物件建立的時候就自動初始化成員變數呢,這一點對操作保護成員是至關重要的,答案是肯定的。關於c 類成員的初始化,有專門的建構函式來進行自動操作而無需要手工呼叫。類建構...

類的建構函式與析構函式

類的建構函式與析構函式 include 所有的類預設都有乙個建構函式,析構函式 建構函式,過載,沒有返回值,class myclass myclass int data 建構函式可以過載 myclass void run void main1 explicit 關鍵字 控制函式不能採用型別轉換 in...

建構函式與析構函式

建構函式 主要作用就是為物件初始化。有一點要說的是,在繼承體系彙總,如果在建構函式中,如果沒有指定基類的建構函式,那麼編譯器會在建構函式開頭加入,基類的預設建構函式,這樣就可以初始化基類物件部分 析構函式 對於析構函式,要說的多點,實際也不太複雜,就是加入了virtual 使其具有了多型性質 inc...