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