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