???????可以用多個基類來派生一個類。
格式為:
class 類名:類名1,…, 類名n
{
private: … ; //私有成員說明;
public: … ; //公有成員說明;
protected: … ; //保護的成員說明;
};class D: public A, protected B, private C
{
…//派生類中新增加成員
};
示例:
#include <iostream>
using namespace std;class A
{
public:A(int a){cout << "調用基類A:構造函數.\n";x = a;}~A(){cout << "調用基類A:析構函數.\n";}private:int x;
};class B
{
public:B(int a){cout << "調用基類B:構造函數.\n";y = a;}~B(){cout << "調用基類B:析構函數.\n";}private:int y;
};class C :public A, public B
{
public:C(int a,int b):A(a),B(100){cout << "調用派生類C:構造函數.\n";z = a;}~C() {cout << "調用派生類C:析構函數.\n";}private:int z;
};int main()
{C obj(10, 50);return 0;
}
初始化基類成員
???????構造函數不能被繼承,派生類的構造函數必須調用基類的構造函數來初始化基類成員基類子對象。
派生類構造函數的調用順序如下:
- 基類的構造函數
- 派生類的構造函數
示例:
#include <iostream>
using namespace std;class A
{
public:A(){cout << "調用基類A:默認構造函數.\n";}A(int a){cout << "調用基類A:構造函數.\n";x = a;}~A(){cout << "調用基類A:析構函數.\n";}private:int x;
};class B
{
public:B(int a){cout << "調用基類B:構造函數.\n";y = a;}~B(){cout << "調用基類B:析構函數.\n";}private:int y;
};class C :public A, public B
{
public:C(int a, int b) :A(a), B(100){cout << "調用派生類C:構造函數.\n";z = a;}~C(){cout << "調用派生類C:析構函數.\n";}private:int z;A obj1,obj2;
};int main()
{C obj(10, 20);return 0;
}