文档章节

virtual继承

y
 yizhangxyz
发布于 2016/05/10 12:08
字数 148
阅读 11
收藏 0

一般用于多继承中,

比如,存在基类B:

class B{
public :
    int a;
    
public:
    B()
    {
        CCLOG("construc b------------");
    }
};

派生类D1和D2:

class D1:public B{
public :
    D1()
    {
        CCLOG("construc d1------------");
    }
};

class D2:public B{
public :
    D2()
    {
        CCLOG("construc d2------------");
    }
};

class C:public D1,public D2
{
public :
    C()
    {
        CCLOG("construc c------------");
    }

};

那么C拥有2个a,分别来自D1和D2。

C c;

c.a;//报错

c.D1::a;//ok

int _size = sizeof(C);//_size == 8

构造顺序为 b->d1->b->d2->c

 

但如果 D1,D2使用virtual继承

class D1:virtual public B{};

class D2:virtual public B{};

那么C只会有一个a

c.a;//ok

int _size = sizeof(C);//_size == 12

构造顺序为 b->d1->d2->c

© 著作权归作者所有

共有 人打赏支持
y
粉丝 1
博文 67
码字总数 42366
作品 0
成都
虚函数——虚表总结

非虚拟继承 【带虚函数的类】 class Base { public: virtual void FunTest1() { cout<<"Base::FunTest1()"<

I慕蓝
2016/04/19
0
0
C++对象模型学习——Data语意学

对于下面代码,sizeof的结果: 结果的大小和机器还有编译器都有关。 从class X并不是空,它有一个隐藏的1byte大小,这是编译器安插进去的一个char。这使得这 一class的两个objects得以在内存...

thanatos_y
2016/07/06
58
0
Virtual的用法

C++ Virtual详解 Virtual是C++ OO机制中很重要的一个关键字。只要是学过C++的人都知道在类Base中加了Virtual关键字的函数就是虚拟函数(例如函数print),于是在Base的派生类Derived中就可以...

PlayWithYou
2017/08/22
0
0
关于虚基类~点点

1. 虚基类 虚基类说明格式: virtual 其中,virtual是虚基类的关键字。虚基类的说明是用在定义派生类时,写在派生类名的后面。 派生类的构造函数的调用次序的原则: · 虚基类的构造函数在非...

猪女
2010/11/25
376
2
C++ vitural关键字

Virtual是C++ OO机制中很重要的一个关键字。只要是学过C++的人都知道在类Base中加了Virtual关键字的函数就是虚拟函数(例如函数print),于是在Base的派生类Derived中就可以通过重写虚拟函数...

长平狐
2012/09/03
806
0

没有更多内容

加载失败,请刷新页面

加载更多

利用碎片化时间Get Linux系统

起初,我做着一份与IT毫无关系的工作,每月领着可怜的工资,一直想改变现状,但无从下手,也就是大家熟知的迷茫。我相信,每一个人都会或多或少的经历过迷茫,迷茫每一个选择,迷茫工作或者生...

linuxprobe16
今天
5
0
OSChina 周日乱弹 —— 恨不得给你买张飞机挂票

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @开源中国首席灵魂师:分享张希/曹方的单曲《认真地老去》 来不及认真的年轻过,就认真的老去! 《认真地老去》- 张希/曹方 手机党少年们想听...

小小编辑
今天
287
6
如何实现靠谱的分布式锁?

分布式锁,是用来控制分布式系统中互斥访问共享资源的一种手段,从而避免并行导致的结果不可控。基本的实现原理和单进程锁是一致的,通过一个共享标识来确定唯一性,对共享标识进行修改时能够...

郑加威
今天
3
0
Mac OS X下Maven的安装与配置

Mac OS X 安装Maven: 下载 Maven, 并解压到某个目录。例如/Users/robbie/apache-maven-3.3.3 打开Terminal,输入以下命令,设置Maven classpath $ vi ~/.bash_profile 添加下列两行代码,之后...

TonyStarkSir
今天
5
0
关于编程,你的练习是不是有效的?

最近由于工作及Solution项目的影响,我在重新学习DDD和领域建模的一些知识。然后,我突然就想到了这个问题,以及我是怎么做的? 对于我来说,提升技能的项目会有四种: 纯兴趣驱动的项目。即...

问题终结者
今天
16
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部