c++ 入門——淺析建構函式和解構函式
前文回顧
本文件環境基於Vscode + GCC + CodeRunner
關於C++的環境搭建請參考下面連結:
https://www.jb51.net/article/186542.htm
由於本人具有C#開發經驗,部分相同的知識就不再贅述了。只列一下需要記錄的知識。
HelloWorld
cout 代表輸出<<
cin 代表輸入 >>
endl;代表換行,清空緩衝區。
#include <iostream> int main() { std::cout << "Helloworld22222222222!" << std::endl; return 0; }
RunCode結果如下:
PS E:\LearchC\TestOne> cd "e:\LearchC\TestOne\" ; if ($?) { g++ -fexec-charset=GBK -std=c++11 1-HelloWord.cpp -o a.exe } ; if ($?) { ./a.exe }
Helloworld22222222222!
使用名稱空間
#include <iostream> using namespace std; int main() { cout << "請輸入一個數字!" << endl; int a; cin >> a; cout << "你輸入的是" << a << endl; return 0; }
RunCode結果如下:
請輸入一個數字!
2
你輸入的是2
建構函式和解構函式
- 建構函式的作用:用於新建物件的初始化工作。
- 解構函式的作用:用於在撤銷物件前,完成一些清理工作,比如:釋放記憶體等。
每當建立物件時,需要新增初始化程式碼時,則需要定義自己的建構函式;而物件撤銷時,需要自己新增清理工作的程式碼時,則需要定義自己的解構函式。
按引數型別
- 無參建構函式
- 有參建構函式
- copy建構函式
#include <iostream> using namespace std; class Person { public: int _a; public: //無參建構函式 Person() { cout << "Person 建構函式的呼叫" << endl; } //有參建構函式 Person(int a) { _a = a; cout << "Person建構函式A:" << a << endl; } Person(const Person &p) { _a = p._a; cout << "PersonCopay建構函式_a:" << _a << endl; } //解構函式 ~Person() { cout << "Person 解構函式的呼叫" << endl; } }; void test(){ Person p1; } int main(){ test(); system("pause"); return 0; }
RunCode結果如下:
test方法結束後,會呼叫解構函式。
Person 建構函式的呼叫
Person 解構函式的呼叫
改變呼叫方式,在main裡呼叫,將只出現呼叫建構函式,因為main函式後面pause暫停,不會釋放Person的析構。
int main(){ Person p1; system("pause"); return 0; }
RunCode 結果如下
Person 建構函式的呼叫
按呼叫方式
- 括號法
- 顯示呼叫
- 隱式呼叫
void test01() { //括號法 // Person p1; //預設 // Person p2(2); //有參 // Person p3(p2); //copy建構函式 // cout << "p2的age:" << p2._a << endl; // cout << "p3的age:" << p3._a << endl; //呼叫預設函式不能加() //因為下面這行程式碼編譯器會認為是函式的宣告,不會建立物件 //Person p4(); //顯示法 // Person p1; // Person p2 = Person(10); // Person p3 = Person(p2); // Person(10); //匿名物件,這行執行完畢,立即釋放 //注意事項2:不要用copy建構函式初始化匿名物件,編譯器會認為Person (p3)==Person p3; //Person(p3); //cout << "P2-Age:" << p3._a << endl; //隱式轉換法 Person p1 = 10; //相當於寫了Person p1=Person(10) Person p2 = p1; //相當於copy構造 }
注意事項:
不要用copy建構函式初始化匿名物件;
呼叫預設函式不能加();
呼叫規則
預設情況下,C++編譯器至少給一個類新增三個函式
1.預設建構函式(無參)
2.預設解構函式
3.預設拷貝建構函式,對屬性進行值拷貝
建構函式呼叫規則如下:
- 如果使用者定義有參建構函式,c++不在提供預設無參噶建構函式
- 如果使用者定義拷貝建構函式,c++不會再提供其他建構函式
總結
第三種隱式轉換法,我看的有點頭暈,寫法太多。java和C#在建構函式這塊呼叫方法做了簡化,只能用new來建立物件。
正所謂:華山自古一條道,好好的走吧!
以上就是c++ 入門——淺析建構函式和解構函式的詳細內容,更多關於c++ 建構函式和解構函式的資料請關注我們其它相關文章!