C++(建構函式與解構函式)
阿新 • • 發佈:2018-11-23
C++(建構函式與解構函式)
1. 建構函式
用於對類的物件的初始化,建構函式名與類名相同。
可在類內直接定義,也可在類內宣告類外定義(定義時在函式名前加類名::)。
建構函式無返回值型別。
class C
{
public:
C(int a,int b);//類內宣告
private:
int m_num1;
int m_num2;
};
//類外定義
C::C(int a,int b)
{
m_num1=a;
m_num2=b;
}
帶引數的建構函式
初始化可以在函式體內,也可在函式體外。可以過載。
上例為函式體內進行初始化
函式體外初始化:C::C(int a,int b):m_num1(a),m_num2(2){}; //只能用()進行初始化,不能用“=”,多個引數之間用逗號隔開 //“:”到“{”的部分為初始化列表
只能在初始化列表裡進行初始化的情況:
1、const成員和引用成員的初始化
2、類A的建構函式有參,其成員是類B的物件,但是類B的建構函式無參。預設建構函式
若未定義一個類的建構函式,則C++提供一個預設的建構函式。預設建構函式僅僅負責建立物件,而不做任何初始化工作。拷貝建構函式
用一個物件的值建立並初始化另一個物件拷貝建構函式名與類名相同,沒有返回值型別,只有一個引數(為該類物件的引用)。
格式為
類名::拷貝建構函式名::(類名&引用名)
{函式體}
eg:
class C
{
public:
C(int a,int b)//帶參建構函式
{
m_num1=a;
m_num2=b;
}
C(C&obj)//拷貝建構函式的定義
{
m_num1=obj.m_num1;
m_num2=obj.m_num2;
}
private:
int m_num1;
int m_num2;
int main()
{
C objA(1,2);//objA的m_num1的值為1,m_num2的值為2
C objB(objA);//此時objB的成員被objB賦值
return 0;
}
2. 解構函式
結束物件的生命期,開啟一個檔案使用完後關閉檔案
無引數和返回值型別,不能隨意呼叫,不能過載。解構函式名為~類名。