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