多层次的派生
1、多层次的派生的定义
处于同一继承层次的各基类构造函数的调用顺序取决于定义派生类时所指定的基类的顺序,与派生类构造函数中所定义的成员初始化列表顺序无关。
如果类中有对象成员,那么对象成员构造函数的调用顺序与对象在类中声明的顺序一致。
【示例】多级派生时构造函数的使用
#include<iostream>
using namespace std;
class BaseClass1
{
protected:
int v1,v2;
public:
BaseClass1();
BaseClass1(int,int);
~BaseClass1();
};
BaseClass1::BaseClass1()
{
cout<<"Baseclass1 无参构造函数"<<end1;
}
BaseClass1::BaseClass1(int m,int n):v1(m),v2(n)
{
cout<<"BaseClass1 带2个参构造雨数"<<endl;
}
BaseClass1::~BaseClass1()
{
cout<<"BaseClass1 析构函数"<<endl;
}
class BaseClass2:public BaseClass1
{
protected:
int v3;
public:
BaseClass2();
BaseClass2(int);
BaseClass2(int,int,int);
~BaseClass2();
};
aseClass2::BaseClass2()
{
cout<<"Baseclass2 无参构造函数"<<endl:
}
BaseClass2::BaseClass2(int m) :v3(m)
{
cout<<"Baseclass2 带1个参构造函数"<<end1;
}
BaseClass2::BaseClass2(int m,int n,int k):BaseClass1(m,n),v3(k)
{
cout<<"Baseclass2 带3个参构造函数"<<endl;
}
BaseClass2::BaseClass2()
{
cout<<"Baseclass2 析构函数"<<end1;
}
class DerivedClass:publicBaseClass2
{
protected:
int v4;
public:
DerivedClass();
DerivedClass(int);
DerivedClass(int,int,int,int);
~Derivedclass();
};
Derivedclass::Derivedclass ()
{
cout<<"Derivedclass2 无参构造函数"<<endl;
}
DerivedClass::DerivedClass(int k):v4(k)
{
cout<<"Baseclass2 带1个参构造函数"<<endl;
}
DerivedClass::DerivedClass(int m,int n,int k,int t):BaseClass2(m,n,k),v4(t)
{
cout<<"Derivedclass 带4个参构造函数"<<endl;
}
DerivedClass::DerivedClass()
{
cout<<"Derivedclass 析构函数"<<endl;
}
int main()
{
cout<<"无参对象的创建"<<endl;
Derivedclass derviedCla;
return 0;
}
【运行结果】
无参对象的创建
BaseClass1 无参构造函数
BaseClass2 无参构造函数
DerivedClass2 无参构造函数
DerivedClass 析构函数
BaseClass2 析构函数
BaseClass1 析构函数
2、例题
例题1:[单选题]下面关于基类和派生类的描述,正确的是( )
A.一个类可以被多次说明为某个派生类的直接基类,可以不止一次地成为间接基类
B.一个类不能被多次说明为某个派生类的直接基类,可以不止一次地成为间接基类
C.一个类不能被多次说明为某个派生类的直接基类,且只能成为一次间接基类
D.一个类可以被多次说明为某个派生类的直接基类,且只能成为一次间接基类
【正确答案】:B
【答案解析】:一个类可以是另一个或多个类的基类