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