可以用多个基类来派生一个类。
格式为:
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;
}