C++派生類構造函數
派生類構造函數調用順序:
1.基類的構造函數.
2.子對象類的構造函數.
3.派生類構造函數.
當對象被刪除時,派生類的析構函數被執行,由於析構函數也不能被繼承,因此在執行派生類的析構函數時,基類的析構函數也會被調用。先執行派生類的析構函數,再執行子對象類的析構函數,再執行基類的構造函數。
#include
using namespace std;
class A
{
public:
A()
{
cout<<"Construct A"<<endl;
}
~A()
{
cout<<"Destruct A"<<endl;
}
};
class B
{
public:
B()
{
cout<<"Construct B"<<endl;
}
~B()
{
cout<<"Destruct B"<<endl;
}
};
class CBase
{
public:
CBase(void)
{
cout<<"Construct Base"<<endl;
}
~CBase(void)
{
cout<<"Destruct Base"<<endl;
}
A a;
B b;
};
class CBaseEx :public CBase
{
public:
A a;
B b;
CBaseEx()
{
cout<<"Construct BaseEx"<<endl;
}
~CBaseEx()
{
cout<<"Destruct BaseEx"<<endl;
}
};
int main(int argc,char*argv[])
{
CBaseEx cb1;
return 0;
}
1.基類的構造函數.
2.子對象類的構造函數.
3.派生類構造函數.
當對象被刪除時,派生類的析構函數被執行,由於析構函數也不能被繼承,因此在執行派生類的析構函數時,基類的析構函數也會被調用。先執行派生類的析構函數,再執行子對象類的析構函數,再執行基類的構造函數。
#include
using namespace std;
class A
{
public:
A()
{
cout<<"Construct A"<<endl;
}
~A()
{
cout<<"Destruct A"<<endl;
}
};
class B
{
public:
B()
{
cout<<"Construct B"<<endl;
}
~B()
{
cout<<"Destruct B"<<endl;
}
};
class CBase
{
public:
CBase(void)
{
cout<<"Construct Base"<<endl;
}
~CBase(void)
{
cout<<"Destruct Base"<<endl;
}
A a;
B b;
};
class CBaseEx :public CBase
{
public:
A a;
B b;
CBaseEx()
{
cout<<"Construct BaseEx"<<endl;
}
~CBaseEx()
{
cout<<"Destruct BaseEx"<<endl;
}
};
int main(int argc,char*argv[])
{
CBaseEx cb1;
return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.