C++基础之类的虚继承

来源:互联网 发布:软件测试招聘 石家庄 编辑:程序博客网 时间:2024/06/05 21:01

一、多重继承:很少用,现代高级语言弃用多继承

1、基本语法:
class D:public A,private B,protected C

{类D新增加的成员}

2、二义性:A类中有成员a,B类中有成员a,D类继承过来以后,a会出现二义性问题。

解决办法:
1>对于重名情况,添加作用域,c.a=100;c.A::a=100;(这种写法)
2>对与基类中的成员由多份存储变为单一存储,虚继承。

二、虚继承

1、为什么需要虚继承?(虚基类的作用)

在一个类中保留间接共同基类的多份同名成员, 这种现象是人们不希望出现的。C++提供虚基类(virtual base class)的方法, 使得在继承间接共同基类时只保留一份成员。

2、虚基类(虚继承)使用:

Class D;
Class A:public virtual D;
Class B:public virtual D;
Class C:public A,public B;

类C的构造函数为:C(int a,int b,int c,int d):D(d),A(a),B(b),c(c)
{
}

在最后的派生类中不仅要负责对其直接基类进行初始化,还要负责对虚基类初始化。

C++编译系统只执行最后的派生类对虚基类的构造函数的调用,而忽略虚基类的其他派生类(如类B和类C) 对虚基类的构造函数的调用,这就保证了虚基类的数据成员不会被多次初始化。


三、多用组合少用继承!!!!!

在一个类中以另一个类的对象作为数据成员的, 称为类的组合(composition)。继承是纵向的,组合是横向的。

原创粉丝点击