/*
多重继承与虚继承:
定义多重继承:
派生类继承的基类可以通过使用逗号(,)隔开多个基类,派生类为每个基类显式或隐式指定访问级别(public,private,protected)。对于类可以继承的基类的数目没有语言强加限制,但在一个给定派生列表中,一个基类只能出现一次。
派生类的构造次序:
基类构造函数按照基类构造函数在派生列表中的出现次序调用。从最终基类开始初始化。构造函数调用次序不受高早函数初始化列表中哦出现的基类影响,也不受基类在构造函数初始化列表中的出现次序的影响。析构函数调用的次序则相反。
基于指针类型或引用类型的查找:
当一个类继承于多个基类的时候,那些基类之间没有隐含的关系,不允许使用一个基类的指针访问其他基类的成员。
多继承下的类作用域:
当一个类油多个基类的时候,通过所有直接基类同时进行名字查找,多重继承派生类油可能从两个或多个基类继承同名成员,对该成员不加限定的使用是二义性的。
虚继承:
虚继承是一种机制,类通过指出它希望共享其虚基类的状态。在虚继承下,对给定虚基类,无论该类在派生层次中作为虚基类出现多少次,值继承一个共享的基类子对象。共享的基类子对象称为虚基类。
虚基类的声明:
通过关键子irtual修改声明,将基类指定为通过虚继承派生:
class className : virtual public baseName{};
任何指定为基类的类也可以被指定为虚基类,虚基类可以包含通常由非基类支持的任意类元素。
特殊的初始化语义:
在虚派生中,由最低层次派生类的构造函数初始化虚基类。
*/
#include<string>
#include<vector>
struct Base1{
void print(int a) const{}
protected:
int ival;
double dval;
char cval;
private:
int *id;
};
struct Base2{
void print(double b) const{}
protected:
double fval;
private:
double dval;
};
struct Derived:public Base1{
void print(std::string) const;
protected:
std::string sval;
double dval;
};
struct MI:public Derived,public Base2{
void print(std::vector<double>);
protected:
int *ival;
std::vector<double> dvec;
};
int main(){
MI mi;
//不能直接调用基类的基类的成员,下面出错。
// mi.print(42);
return 0;
}
C++第二十三天 多重继承与虚继承
最新推荐文章于 2024-08-18 15:59:14 发布