建構函式:與普通函式相比有三點不同。
和定義的結構體/類名字完全一樣。
沒有返回值。
呼叫的時機:建立乙個物件的時候,對結構體內的物件賦值,初始化用的。而成員函式print()是建立完物件再呼叫。
建構函式不是必須有的,但是一旦定義了建構函式,在建立物件的時候必須要用,否則報錯。
如果即想有建構函式,建立物件的時候不想賦值,那麼久再提供乙個空的建構函式。
建構函式可以寫多個,但是不能寫成一模一樣的。
多個建構函式又稱為:過載,建構函式過載。
結構體/類中的成員函式(方法)名字也可以一樣,但是不能完全相同,這種情況下也稱為過載,成員函式過載。
函式過載時,必須名字一樣,引數型別,個數不一樣才滿足。而名字一樣,引數一樣,返回型別不一樣是不允許的。
過載有什麼好處?可以讓我們寫多個功能類似函式時少起名字。
建立物件的時候就會呼叫建構函式,自己不寫,編譯器會幫你寫乙個。
建立乙個子類物件,父類的建構函式先呼叫,然後才呼叫子類的建構函式。
#includestruct person
person()
void print()
void print(int x)
void print(char x) };
int main(int argc,char *ar**)
析構函式:
配合建構函式使用,如果結構體/類沒有用到堆的空間,可以不用析構函式,但是一旦有成員函式或者建構函式使用了堆上的空間,那就必須要使用析構函式。自己在成員函式中free堆的空間也可以,但是如果此成員函式釋放了,別的成員函式又想要用怎麼辦?難道是再次申請?所以釋放的時機是較難把握的,合理的釋放時機就是在建立的物件完全不用的時候釋放,所以c++提供了析構函式,用來最後釋放堆上的記憶體。
建構函式可以過載,析構函式不允許過載,首先沒必要,再者編譯器不知道呼叫哪個。
析構函式不能寫返回值。
析構函式不是我們手動呼叫,而是編譯器自動呼叫。
#include#includestruct person
~person() };
int main(int argc,char *ar**)
C 建構函式 析構函式 虛析構函式
一般地,建立物件和刪除物件時,父類建構函式 子類建構函式 子類析構函式 父類析構函式。特例 如果用new建立了乙個物件,並將父類的指標指向這個子類的物件,那麼用delete撤銷物件時,系統只執行基類的析構函式,而不執行派生類的析構函式。如果希望按照子類析構函式 父類析構函式的順序執行,那麼應該將基類...
C 建構函式,析構函式
一 建構函式 在建立類的物件時自動呼叫的乙個函式,主要是為物件本身做初始化工作 沒有返回值,名字和類的名字相同,因為是在建立物件時候自動呼叫的,所以必須型別為public的,可以帶引數,可以有多個 如果類中沒有建構函式,在下面三種情況下,會自動的新增預設的建構函式 1.如果類中有虛函式,或者類中有虛...
C 建構函式 析構函式
在學習類的成員方法時,遇到了兩個函式。簡單介紹一下 一 建構函式 建構函式是類中比較特殊的成員函式,它也是一種方法。主要用來為物件分配儲存空間,完成初始化操作,例如給類的成員變數賦值等。一般來說,建構函式一旦開始執行,那麼物件的生命週期就開始了,最終它將以析構函式結束。如果乙個類含有建構函式,在例項...