虚基类

原创 2018年04月17日 16:15:04

当在多条继承路径上有一个公共的基类,在这些路径中的某几条汇合处,这个公共的基类就会产生多个实例(或多个副本),若只想保存这个基类的一个实例,可以将这个公共基类说明为虚基类。

class A{

};

class B : virtual public A{

};

class C : virtual public A{

};

class D : public B,public C{

};

继承图

同时需要说明的是单继承构造的层次结构是树,多继承构造的层次结构是图。

如上例,BC都继承于A,D又继承于BC,将A声明为虚基类之后,在D中将只有A中数据或函数成员的一份拷贝,即BC仅将同名数据成员的一份拷贝发放到D中,而不管BC从共同的祖先处获得了多少同名数据成员。

多继承派生类构造函数的调用次序有三个原则:
(1)虚基类的构造函数在非虚基类之前调用;
(2)若同一层次中包含多个虚基类,这些虚基类的构造函数按它们说明的次序调用;(说明顺序即class A:public B,C,D)
(3)若虚基类由非虚基类派生而来,则仍先调用基类构造函数,再调用派生类的构造函数。

C++实例---虚基类的构造函数和初始化

运行环境:macOS shell 代码:#include #include #include using namespace std;class base { protected: i...
  • huazhen1234
  • huazhen1234
  • 2017-02-17 17:11:02
  • 317

C++虚基类的内存布局(上)

最好看一下前一篇的C++虚函数表 简而言之,我们一个类可能会有如下的影响因素: 1)成员变量 2)虚函数(产生虚函数表) 3)单一继承(只继承于一个类) 4)多重继承(继承多个类) 5)重...
  • hacker00011000
  • hacker00011000
  • 2016-05-15 20:47:53
  • 702

c++继承之虚基类

虚基类的概念:        若在多继承派生类中继承的基类再拥有一个公共基类,则这个公共基类会在多继承派生类的对象中产生多个公共基类子对象,如果要使这个公共基类再多继承派生类中只产生一个基类子对象,则...
  • erlian1992
  • erlian1992
  • 2015-03-11 20:56:59
  • 1251

c#_虚基类[virtual ],基类与子类继承及引用关系

可以在类中定义字段和方法,字段为私有,可通过构造方法(写在基类中)控制字段的改变。 方法为私有。 父类中含有构造方法,子类中也需要写构造方法,用于对父类构造方法的调用,其中参数名(父类中定义的字段...
  • ds19920925
  • ds19920925
  • 2013-05-06 20:15:42
  • 686

多重继承和虚基类

多重继承描述的是有多个直接基类的类。多重继承会带来两个主要的问题: ①从两个不同的基类继承同名方法; ②从两个或更多相关基类那里继承同一个类的多个实例。例如: class A { private:  ...
  • wswbdfei
  • wswbdfei
  • 2014-07-28 00:15:59
  • 937

C++ 虚基类简单使用

1、概述        虚基类是用关键字virtual声明继承的父类,即便该基类在多条链路上被一个子类继承,但是该子类中只包含一个该虚基类的备份,这也是虚基类的作用所在。        正是由于虚...
  • geniusluzh
  • geniusluzh
  • 2012-12-30 11:41:32
  • 2739

抽象类和虚基类的定义及用途

抽象类不能实例化对象! 为了让一个类成为抽象类,至少必须有一个纯虚函数。包含至少一个纯虚函数的类视为抽象类! classA { public: virtual void lock(void)=0; ...
  • qq_32175379
  • qq_32175379
  • 2016-12-21 19:41:51
  • 2618

C++虚基类的作用、用法和意义

教科书上面对C++虚基类的描述玄而又玄,名曰“共享继承”,名曰“各派生类的对象共享基类的的一个拷贝”,其实说白了就是解决多重多级继承造成的二义性问题。例如有基类B,从B派生出C和D,然后类F又同时继承...
  • Leonard_wang
  • Leonard_wang
  • 2012-11-07 21:15:38
  • 27386

虚基类声明,初始化及调用顺序

1.如果虚基类中定义有带参数的构造函数,并且没有默认定义构造函数,则整个继承结构中,所有直接或间接的派生类必须在构造函数的成员初始化列表中列出虚基类构造函数的调用。 2.建立对象时,如果这个对象中含...
  • OPK625153475
  • OPK625153475
  • 2012-07-29 00:19:50
  • 3554

C++ 虚基类是什么

有一个类A,A中有个成员 iB和C都继承了AD又同时继承了B和C那么D中的i是来自于B还是来自于C呢?这时候就要用到虚基类(虚继承)此时B和C继承的是同一个对象A,而不是2个A这样i都是来自于一个对象...
  • a799581229
  • a799581229
  • 2016-09-02 16:00:25
  • 400
收藏助手
不良信息举报
您举报文章:虚基类
举报原因:
原因补充:

(最多只允许输入30个字)