物聯(lián)網(wǎng)/嵌入式工程師
重磅升級(jí):新增硬件電路設(shè)計(jì)與實(shí)戰(zhàn),讓你軟硬通吃,同級(jí)PK無(wú)敵!行業(yè)風(fēng)口、政策傾斜,新晉熱門高薪不內(nèi)卷!0基礎(chǔ)一站式就業(yè)完整路徑,搶占先發(fā)優(yōu)勢(shì)!
上一小節(jié),我們介紹了 C++ 中的成員函數(shù),我們這一小節(jié)來(lái)介紹兩個(gè)特殊的成員函數(shù),構(gòu)造函數(shù)和析構(gòu)函數(shù)。
我們先來(lái)看看構(gòu)造函數(shù)
#include <string> class Staff { public: Staff(); };
可以看到,這里定義了一個(gè)和名稱和類名相同,沒有返回值的函數(shù),這個(gè)函數(shù)稱為構(gòu)造函數(shù)。構(gòu)造函數(shù)的特殊之處在于,他會(huì)在類實(shí)例化的時(shí)候被調(diào)用。
我們先實(shí)現(xiàn)一下這個(gè)函數(shù),在函數(shù)中打印一行:
#include "Staff.hpp" #include <stdio.h> Staff::Staff() { printf("構(gòu)造函數(shù)被調(diào)用\n"); }
然后在 main 中調(diào)用一下:
#include <stdio.h> #include "Staff.hpp" int main(int argc,char **argv) { Staff staff1; return 0; }
運(yùn)行的時(shí)候,可以看到,剛剛的那條打印語(yǔ)句被運(yùn)行了。
此外,構(gòu)造函數(shù)是可以有參數(shù)的,我們常常用構(gòu)造函數(shù)來(lái)進(jìn)行初始化。例如,我們可以利用構(gòu)造函數(shù)對(duì) name 和 age 進(jìn)行傳值。
Staff.hpp
#include <string> class Staff { public: Staff(std::string _name, int _age); public: std::string name; int age; };
Staff.cpp
#include "Staff.hpp" #include <stdio.h> Staff::Staff(std::string _name, int _age) { name = _name; age = _age; }
當(dāng)然,對(duì)于有參數(shù)的構(gòu)造函數(shù),調(diào)用的時(shí)候只要傳進(jìn)去參數(shù)就行了。現(xiàn)在,我們可以創(chuàng)建一個(gè)名叫 “mooc”,29 歲的員工了。
#include <stdio.h> #include "Staff.hpp" int main(int argc,char **argv) { Staff staff("mooc", 29); return 0; }
對(duì)象實(shí)例化的時(shí)候,會(huì)調(diào)用構(gòu)造函數(shù),而對(duì)象銷毀的時(shí)候,就會(huì)調(diào)用析構(gòu)函數(shù)。我們先來(lái)嘗試寫一個(gè)析構(gòu)函數(shù):
Staff.hpp
#include <string> class Staff { public: Staff(std::string _name, int _age); ~Staff(); public: std::string name; int age; };
Staff.cpp
#include "Staff.hpp" #include <stdio.h> Staff::Staff(std::string _name, int _age) { name = _name; age = _age; printf("構(gòu)造函數(shù)被調(diào)用\n"); } Staff::~Staff() { printf("析構(gòu)函數(shù)被調(diào)用\n"); }
調(diào)用代碼不改,然后再運(yùn)行一下。我們發(fā)現(xiàn),程序在調(diào)用了構(gòu)造函數(shù)之后,又調(diào)用了析構(gòu)函數(shù)。
我們之前講過棧內(nèi)存,這個(gè)對(duì)象是分配在棧上面的,實(shí)例化的時(shí)候,調(diào)用了構(gòu)造函數(shù),而緊接著,main 函數(shù)就要結(jié)束了,這個(gè)棧對(duì)象就自動(dòng)銷毀了,銷毀的時(shí)候,就調(diào)用了析構(gòu)函數(shù)。
請(qǐng)驗(yàn)證,完成請(qǐng)求
由于請(qǐng)求次數(shù)過多,請(qǐng)先驗(yàn)證,完成再次請(qǐng)求
打開微信掃碼自動(dòng)綁定
綁定后可得到
使用 Ctrl+D 可將課程添加到書簽
舉報(bào)