对象特性-构造函数和析构函数
基礎(chǔ)概念:
????????構(gòu)造函數(shù):是一種特殊的方法。主要用來在創(chuàng)建對(duì)象時(shí)初始化對(duì)象,即為對(duì)象成員變量賦初始值,總與new運(yùn)算符一起使用在創(chuàng)建對(duì)象的語(yǔ)句中。特別的一個(gè)類可以有多個(gè)構(gòu)造函數(shù) ,可根據(jù)其參數(shù)個(gè)數(shù)的不同或參數(shù)類型的不同來區(qū)分它們 即構(gòu)造函數(shù)的重載
? ? ? ? 析構(gòu)函數(shù):析構(gòu)函數(shù)(destruct) 與構(gòu)造函數(shù)相反,當(dāng)對(duì)象結(jié)束其生命周期時(shí)(例如對(duì)象所在的函數(shù)已調(diào)用完畢),系統(tǒng)自動(dòng)執(zhí)行析構(gòu)函數(shù)。析構(gòu)函數(shù)往往用來做“清理善后” 的工作(例如在建立對(duì)象時(shí)用new開辟了一片內(nèi)存空間,delete會(huì)自動(dòng)調(diào)用析構(gòu)函數(shù)后釋放內(nèi)存)
我相信大家對(duì)于上面的哪些個(gè)解釋都懶得看.
說白了構(gòu)造函數(shù)就是給類的對(duì)象賦值,析構(gòu)函數(shù)就是用來清理善后的操作(例如在建立對(duì)象時(shí)用new開辟了一片內(nèi)存空間,delete會(huì)自動(dòng)調(diào)用析構(gòu)函數(shù)后釋放內(nèi)存(這些后幾篇博客會(huì)介紹到))
構(gòu)造函數(shù)語(yǔ)法:
? ? ? ? ? ? ? ? 類名() {}
- 構(gòu)造函數(shù),沒有返回值也不寫void
- 函數(shù)名稱與類名相同
- 構(gòu)造函數(shù)可以有參數(shù),因此可以發(fā)生重載
- 程序在調(diào)用對(duì)象時(shí)候會(huì)自動(dòng)調(diào)用構(gòu)造,無須手動(dòng)調(diào)用,而且只會(huì)調(diào)用一次
析構(gòu)函數(shù)的語(yǔ)法:
? ? ? ? ? ? ? ? ~類名() {}? ? ? ? ? ??
- 析構(gòu)函數(shù),沒有返回值也不寫void
- 函數(shù)名稱與類名相同,在名稱前加上符號(hào) ~
- 析構(gòu)函數(shù)不可以有參數(shù),因此不可以發(fā)生重載
- 程序在對(duì)象銷毀前會(huì)自動(dòng)調(diào)用析構(gòu),無須手動(dòng)調(diào)用,而且只會(huì)調(diào)用一次
#include<iostream>
using namespace std;class Person
{
public:Person()      //構(gòu)造函數(shù){cout << "構(gòu)造函數(shù)的調(diào)用" << endl;}~Person()        //析構(gòu)函數(shù)“~”是ESC鍵下面那塊{cout << "析構(gòu)函數(shù)的調(diào)用" << endl;}
};void test()
{Person p;
}int main()
{test();system("pause");return 0;
}構(gòu)造函數(shù)的分類及調(diào)用:
構(gòu)造函數(shù)實(shí)際上總共分為四種:
1.有參構(gòu)造
2.無參構(gòu)造
3.普通構(gòu)造
4.拷貝構(gòu)造
三種調(diào)用:
1.括號(hào)法
2.顯示法
3.隱式轉(zhuǎn)換法
#include<iostream>
using namespace std;class Person
{
public:Person()    //無參(默認(rèn))構(gòu)造函數(shù){cout << "無參構(gòu)造函數(shù)的調(diào)用" << endl;}Person(int a)         //有參構(gòu)造函數(shù){p_age = a;cout << "有參構(gòu)造函數(shù)的調(diào)用" << endl;}Person(const Person& p)  //拷貝函數(shù){cout << "拷貝函數(shù)的調(diào)用" << endl;}~Person()        //析構(gòu)函數(shù)“~”是ESC鍵下面那塊{cout << "析構(gòu)函數(shù)的調(diào)用" << endl;}private:int p_age;
};void test()
{//括號(hào)法Person p1;    //無參(默認(rèn))Person p2(18);   //有參調(diào)用-->括號(hào)法Person p3 = Person(p2);  //拷貝函數(shù)的調(diào)用cout << "------------------------" << endl;//顯示法Person p4;Person p5 = Person(18);  //這塊單獨(dú)給Person(18)單獨(dú)提出來 就是匿名的,因?yàn)檫€沒有而名字  這里拿一個(gè)Person類的p5來接收Person p6 = Person(p5);  cout << "------------------------" << endl;//注意事項(xiàng):不要拿拷貝函數(shù)來構(gòu)造一個(gè)函數(shù) 初始化匿名對(duì)象//例如:Person(p3);這樣的話  編譯器會(huì)認(rèn)為這個(gè)Person(p3) ==> Person p3  這樣的話會(huì)和上面那個(gè)報(bào)錯(cuò)為:重定義p3//隱式法Person p7 = 18; //相當(dāng)于Person p7 = Person(18);  -->有參構(gòu)造Person p8 = p7;  //拷貝構(gòu)造cout << "------------------------" << endl;}int main()
{test();system("pause");return 0;
}析構(gòu)函數(shù):
析構(gòu)函數(shù):析構(gòu)函數(shù)(destruct) 與構(gòu)造函數(shù)相反,當(dāng)對(duì)象結(jié)束其生命周期時(shí)(例如對(duì)象所在的函數(shù)已調(diào)用完畢),系統(tǒng)自動(dòng)執(zhí)行析構(gòu)函數(shù)。析構(gòu)函數(shù)往往用來做“清理善后” 的工作(例如在建立對(duì)象時(shí)用new開辟了一片內(nèi)存空間,delete會(huì)自動(dòng)調(diào)用析構(gòu)函數(shù)后釋放內(nèi)存)
下篇講!!!!
Life was like a box of chocolates, you never know what you're going to get.
總結(jié)
以上是生活随笔為你收集整理的对象特性-构造函数和析构函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 史诗跨界石怎么得
- 下一篇: 对象特性-----拷贝构造函数的调用
