欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c++ 入門(mén)——淺析構(gòu)造函數(shù)和析構(gòu)函數(shù)

 更新時(shí)間:2020年08月31日 08:44:41   作者:從此啟程  
這篇文章主要介紹了c++ 淺析構(gòu)造函數(shù)和析構(gòu)函數(shù)的相關(guān)資料,幫助大家入門(mén)c++ 編程,感興趣的朋友可以了解下

前文回顧

本文檔環(huán)境基于Vscode + GCC + CodeRunner

關(guān)于C++的環(huán)境搭建請(qǐng)參考下面鏈接:

http://www.dbjr.com.cn/article/186542.htm

由于本人具有C#開(kāi)發(fā)經(jīng)驗(yàn),部分相同的知識(shí)就不再贅述了。只列一下需要記錄的知識(shí)。

HelloWorld

cout 代表輸出<<

cin 代表輸入 >>

endl;代表?yè)Q行,清空緩沖區(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 << "請(qǐng)輸入一個(gè)數(shù)字!" << endl;
 int a;
 cin >> a;
 cout << "你輸入的是" << a << endl;
 return 0;
}

RunCode結(jié)果如下:

請(qǐng)輸入一個(gè)數(shù)字!
2
你輸入的是2

構(gòu)造函數(shù)和析構(gòu)函數(shù)

  • 構(gòu)造函數(shù)的作用:用于新建對(duì)象的初始化工作。
  • 析構(gòu)函數(shù)的作用:用于在撤銷(xiāo)對(duì)象前,完成一些清理工作,比如:釋放內(nèi)存等。

每當(dāng)創(chuàng)建對(duì)象時(shí),需要添加初始化代碼時(shí),則需要定義自己的構(gòu)造函數(shù);而對(duì)象撤銷(xiāo)時(shí),需要自己添加清理工作的代碼時(shí),則需要定義自己的析構(gòu)函數(shù)。

按參數(shù)類(lèi)型

  • 無(wú)參構(gòu)造函數(shù)
  • 有參構(gòu)造函數(shù)
  • copy構(gòu)造函數(shù)
#include <iostream>
using namespace std;
class Person
{
public:
 int _a;

public:
 //無(wú)參構(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é)束后,會(huì)調(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ù),因?yàn)閙ain函數(shù)后面pause暫停,不會(huì)釋放Person的析構(gòu)。

int main(){
Person p1;
system("pause");
return 0;
}

RunCode 結(jié)果如下

Person 構(gòu)造函數(shù)的調(diào)用

按調(diào)用方式

  • 括號(hào)法
  • 顯示調(diào)用
  • 隱式調(diào)用
void test01()
{

 //括號(hào)法
 // Person p1; //默認(rèn)
 // Person p2(2); //有參
 // Person p3(p2); //copy構(gòu)造函數(shù)
 // cout << "p2的age:" << p2._a << endl;
 // cout << "p3的age:" << p3._a << endl;

 //調(diào)用默認(rèn)函數(shù)不能加()
 //因?yàn)橄旅孢@行代碼編譯器會(huì)認(rèn)為是函數(shù)的聲明,不會(huì)創(chuàng)建對(duì)象
 //Person p4();

 //顯示法
 // Person p1;
 // Person p2 = Person(10);
 // Person p3 = Person(p2);

 // Person(10); //匿名對(duì)象,這行執(zhí)行完畢,立即釋放
 //注意事項(xiàng)2:不要用copy構(gòu)造函數(shù)初始化匿名對(duì)象,編譯器會(huì)認(rèn)為Person (p3)==Person p3;
 //Person(p3);
 //cout << "P2-Age:" << p3._a << endl;

 //隱式轉(zhuǎn)換法
 Person p1 = 10; //相當(dāng)于寫(xiě)了Person p1=Person(10)
 Person p2 = p1; //相當(dāng)于copy構(gòu)造
}

注意事項(xiàng):

不要用copy構(gòu)造函數(shù)初始化匿名對(duì)象;

調(diào)用默認(rèn)函數(shù)不能加();

調(diào)用規(guī)則

默認(rèn)情況下,C++編譯器至少給一個(gè)類(lèi)添加三個(gè)函數(shù)
1.默認(rèn)構(gòu)造函數(shù)(無(wú)參)
2.默認(rèn)析構(gòu)函數(shù)
3.默認(rèn)拷貝構(gòu)造函數(shù),對(duì)屬性進(jìn)行值拷貝

構(gòu)造函數(shù)調(diào)用規(guī)則如下:

  • 如果用戶(hù)定義有參構(gòu)造函數(shù),c++不在提供默認(rèn)無(wú)參噶構(gòu)造函數(shù)
  • 如果用戶(hù)定義拷貝構(gòu)造函數(shù),c++不會(huì)再提供其他構(gòu)造函數(shù)

總結(jié)

第三種隱式轉(zhuǎn)換法,我看的有點(diǎn)頭暈,寫(xiě)法太多。java和C#在構(gòu)造函數(shù)這塊調(diào)用方法做了簡(jiǎn)化,只能用new來(lái)創(chuàng)建對(duì)象。

正所謂:華山自古一條道,好好的走吧!

以上就是c++ 入門(mén)——淺析構(gòu)造函數(shù)和析構(gòu)函數(shù)的詳細(xì)內(nèi)容,更多關(guān)于c++ 構(gòu)造函數(shù)和析構(gòu)函數(shù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論