C++第二十三天 多重继承与虚继承

/*
多重继承与虚继承:
	定义多重继承:
		派生类继承的基类可以通过使用逗号(,)隔开多个基类,派生类为每个基类显式或隐式指定访问级别(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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值