C 物件導向(二) 構造 析構函式

2021-10-06 09:57:02 字數 2243 閱讀 7178

析構函式(destructor)

構造、析構順序

建構函式(也叫構造器),在物件建立的時候回自動呼叫,一般用於完成物件的初始化工作

函式名與類同名,無返回值,可以有引數,可以過載,可以有多個建構函式

struct person 

person

(int age)};

intmain()

一旦自定義了建構函式,必須用其中乙個自定義的建構函式來初始化物件。

如果上面的**沒有這個:

person()

呼叫無參的建構函式就會報錯。

通過malloc分配的物件不會呼叫建構函式,而new會呼叫。

// 呼叫了建構函式

person *p =

new person;

// 沒有呼叫

person *p =

(person *

)malloc

(sizeof

(person));

p->m_age =10;

p->

run();

free

(p);

可能會有這種說法:預設情況下,編譯器會為每乙個類生成空的無參的建構函式。

這裡有些問題:

struct person 

;int

main()

上面這段**,是沒有生成建構函式的,因為這裡沒有任何初始化的動作。

只有在某些特定的情況下,編譯器才會為類生成空的無參的建構函式。

這裡生成了建構函式:

struct person 

;

這裡實際上有4個無引數的,3個有引數的,一共建立了7個person物件:

struct person 

person

(int age)};

person g_person0;

// 呼叫了無參的建構函式

person g_person1()

;// 函式宣告,函式名是g_person1,返回值型別是person,無參

person g_person2(6

);// 呼叫了person(int age)

intmain()

函式的實現:

// 這是上面函式的實現

person g_person1()

建構函式的互相呼叫

這樣可以簡化**,一次性做許多事情:

struct person

// person () 這是在初始化乙個新的臨時物件,而不是呼叫建構函式

person

(int age,

int height)

:m_age

(age)

,m_height

(height)

};

析構函式(也叫析構器),在物件銷毀的時候自動呼叫,一般用於完成物件的清理工作

class

person

// 乙個person物件銷毀的象徵

~person()

};intmain()

getchar()

;return0;

}

函式名以~開頭,與類同名,無返回值(void都不能寫),無參,不可以過載,有且只有乙個析構函式。

注意

class

person

~person()

};class

student

:public person

// 子類的析構操作完之後再去呼叫父類的析構

~student()

};intmain()

getchar()

;return0;

}

輸出為:

person::

person()

student::

student()

student::

~student()

person::

~person

()

C 物件導向程式設計入門 建構函式與析構函式(二)

下面我們來看乙個帶引數的建構函式是如何進行物件的始化操作的。如下 include using namespace std class teacher void show protected char name void teacher show 我們建立了乙個帶有字元指標的帶有形參的teacher ...

python物件導向與構造構析函式

程式設計正規化 程式設計范型 程式設計正規化或程式設計法 範即模範 典範之意,正規化即模式 方法 是一類典型的程式設計風格,是指從事軟體工程的一類典型的風格 可以對照方法學 如 函式式程式設計 程式程式設計 物件導向程式設計 命令式程式設計等等為不同的程式設計范型。面向過程程式設計 面向過程 pro...

《物件導向程式設計 C 》析構函式

建立類的物件時,會自動呼叫某個合適的建構函式,同樣,當物件被摧毀時,也會自動呼叫乙個析構函式。析構函式的名稱與類的名稱是完全相同的,只是在前面加了個波浪號 作為字首,它不會返回任何值,也不能帶有任何引數。析構函式有助於在跳出程式 比如關閉檔案 釋放記憶體等 前釋放資源。物件的摧毀出現在以下兩種情況 ...