c++ 入門——淺析構(gòu)造函數(shù)和析構(gòu)函數(shù)
前文回顧
本文檔環(huán)境基于Vscode + GCC + CodeRunner
關(guān)于C++的環(huán)境搭建請參考下面鏈接:
http://www.dbjr.com.cn/article/186542.htm
由于本人具有C#開發(fā)經(jīng)驗,部分相同的知識就不再贅述了。只列一下需要記錄的知識。
HelloWorld
cout 代表輸出<<
cin 代表輸入 >>
endl;代表換行,清空緩沖區(qū)。
#include <iostream> int main() { std::cout << "Helloworld22222222222!" << std::endl; return 0; }
RunCode結(jié)果如下:
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 << "請輸入一個數(shù)字!" << endl; int a; cin >> a; cout << "你輸入的是" << a << endl; return 0; }
RunCode結(jié)果如下:
請輸入一個數(shù)字!
2
你輸入的是2
構(gòu)造函數(shù)和析構(gòu)函數(shù)
- 構(gòu)造函數(shù)的作用:用于新建對象的初始化工作。
- 析構(gòu)函數(shù)的作用:用于在撤銷對象前,完成一些清理工作,比如:釋放內(nèi)存等。
每當創(chuàng)建對象時,需要添加初始化代碼時,則需要定義自己的構(gòu)造函數(shù);而對象撤銷時,需要自己添加清理工作的代碼時,則需要定義自己的析構(gòu)函數(shù)。
按參數(shù)類型
- 無參構(gòu)造函數(shù)
- 有參構(gòu)造函數(shù)
- copy構(gòu)造函數(shù)
#include <iostream> using namespace std; class Person { public: int _a; public: //無參構(gòu)造函數(shù) Person() { cout << "Person 構(gòu)造函數(shù)的調(diào)用" << endl; } //有參構(gòu)造函數(shù) Person(int a) { _a = a; cout << "Person構(gòu)造函數(shù)A:" << a << endl; } Person(const Person &p) { _a = p._a; cout << "PersonCopay構(gòu)造函數(shù)_a:" << _a << endl; } //析構(gòu)函數(shù) ~Person() { cout << "Person 析構(gòu)函數(shù)的調(diào)用" << endl; } }; void test(){ Person p1; } int main(){ test(); system("pause"); return 0; }
RunCode結(jié)果如下:
test方法結(jié)束后,會調(diào)用析構(gòu)函數(shù)。
Person 構(gòu)造函數(shù)的調(diào)用
Person 析構(gòu)函數(shù)的調(diào)用
改變調(diào)用方式,在main里調(diào)用,將只出現(xiàn)調(diào)用構(gòu)造函數(shù),因為main函數(shù)后面pause暫停,不會釋放Person的析構(gòu)。
int main(){ Person p1; system("pause"); return 0; }
RunCode 結(jié)果如下
Person 構(gòu)造函數(shù)的調(diào)用
按調(diào)用方式
- 括號法
- 顯示調(diào)用
- 隱式調(diào)用
void test01() { //括號法 // Person p1; //默認 // Person p2(2); //有參 // Person p3(p2); //copy構(gòu)造函數(shù) // cout << "p2的age:" << p2._a << endl; // cout << "p3的age:" << p3._a << endl; //調(diào)用默認函數(shù)不能加() //因為下面這行代碼編譯器會認為是函數(shù)的聲明,不會創(chuàng)建對象 //Person p4(); //顯示法 // Person p1; // Person p2 = Person(10); // Person p3 = Person(p2); // Person(10); //匿名對象,這行執(zhí)行完畢,立即釋放 //注意事項2:不要用copy構(gòu)造函數(shù)初始化匿名對象,編譯器會認為Person (p3)==Person p3; //Person(p3); //cout << "P2-Age:" << p3._a << endl; //隱式轉(zhuǎn)換法 Person p1 = 10; //相當于寫了Person p1=Person(10) Person p2 = p1; //相當于copy構(gòu)造 }
注意事項:
不要用copy構(gòu)造函數(shù)初始化匿名對象;
調(diào)用默認函數(shù)不能加();
調(diào)用規(guī)則
默認情況下,C++編譯器至少給一個類添加三個函數(shù)
1.默認構(gòu)造函數(shù)(無參)
2.默認析構(gòu)函數(shù)
3.默認拷貝構(gòu)造函數(shù),對屬性進行值拷貝
構(gòu)造函數(shù)調(diào)用規(guī)則如下:
- 如果用戶定義有參構(gòu)造函數(shù),c++不在提供默認無參噶構(gòu)造函數(shù)
- 如果用戶定義拷貝構(gòu)造函數(shù),c++不會再提供其他構(gòu)造函數(shù)
總結(jié)
第三種隱式轉(zhuǎn)換法,我看的有點頭暈,寫法太多。java和C#在構(gòu)造函數(shù)這塊調(diào)用方法做了簡化,只能用new來創(chuàng)建對象。
正所謂:華山自古一條道,好好的走吧!
以上就是c++ 入門——淺析構(gòu)造函數(shù)和析構(gòu)函數(shù)的詳細內(nèi)容,更多關(guān)于c++ 構(gòu)造函數(shù)和析構(gòu)函數(shù)的資料請關(guān)注腳本之家其它相關(guān)文章!
- C++超詳細講解構(gòu)造函數(shù)與析構(gòu)函數(shù)的用法及實現(xiàn)
- C++編程析構(gòu)函數(shù)拷貝構(gòu)造函數(shù)使用示例詳解
- C++中構(gòu)造函數(shù)與析構(gòu)函數(shù)的詳解及其作用介紹
- C++:構(gòu)造函數(shù),析構(gòu)函數(shù)詳解
- 正確理解C++的構(gòu)造函數(shù)和析構(gòu)函數(shù)
- C++語法詳解之封裝、構(gòu)造函數(shù)、析構(gòu)函數(shù)
- C++構(gòu)造函數(shù)和析構(gòu)函數(shù)的使用與講解
- C++中構(gòu)造函數(shù)與析構(gòu)函數(shù)的調(diào)用順序詳解
- C++類與對象深入之構(gòu)造函數(shù)與析構(gòu)函數(shù)詳解
相關(guān)文章
C/C++ 獲取Windows系統(tǒng)的位數(shù)32位或64位的實現(xiàn)代碼
這篇文章主要介紹了C/C++ 獲取Windows系統(tǒng)的位數(shù)32位或64位的實現(xiàn)代碼的相關(guān)資料,希望通過本文能幫助到大家,讓大家實現(xiàn)這樣的功能,需要的朋友可以參考下2017-10-10C語言中建立和刪除文件連接的相關(guān)函數(shù)講解
這篇文章主要介紹了C語言中建立和刪除文件連接的相關(guān)函數(shù)講解,分別為link和unlink函數(shù)的使用,需要的朋友可以參考下2015-09-09C語言學生信息管理系統(tǒng)設(shè)計與實現(xiàn)
這篇文章主要為大家詳細介紹了C語言學生信息管理系統(tǒng)設(shè)計與實現(xiàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01c++實現(xiàn)strcat字符串連接庫函數(shù)的方法詳解
本篇文章是對使用c++實現(xiàn)strcat字符串連接庫函數(shù)的方法進行了詳細的分析介紹,需要的朋友參考下2013-05-05