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