文档章节

virtual继承

y
 yizhangxyz
发布于 2016/05/10 12:08
字数 148
阅读 11
收藏 0
点赞 2
评论 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
博文 57
码字总数 42366
作品 0
成都
虚函数——虚表总结

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

I慕蓝 ⋅ 2016/04/19 ⋅ 0

C++ Virtual详解

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

A_zhou ⋅ 2014/01/10 ⋅ 0

C++对象模型学习——Data语意学

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

thanatos_y ⋅ 2016/07/06 ⋅ 0

关于虚基类~点点

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

猪女 ⋅ 2010/11/25 ⋅ 2

C++ Virtual详解

Virtual是C++ OO(面向对象机制)机制中很重要的一个关键字。虚函数就是因为成员函数加了关键字virtual,可见它的重要性。 只要是学过C++的人都知道在类Base中加了Virtual关键字的函数就是虚...

Jerikc ⋅ 2013/11/19 ⋅ 0

Virtual的用法

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

PlayWithYou ⋅ 2017/08/22 ⋅ 0

C++ vitural关键字

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

长平狐 ⋅ 2012/09/03 ⋅ 0

C++虚继承的作用

C++虚继承可以防止多重继承产生的二义性问题。 虚继承,就是在被继承的类前面加上virtual关键字,这时被继承的类称为虚基类,如下面代码中的base类。虚继承在多重继承的时可以防止二义性。 ...

ryany ⋅ 2011/01/24 ⋅ 0

C++对象模型学习——Function语意学

如果有一个Point3d的指针和对象: 当这样做: 时,会发生什么事?其中的Point3d::normalize()定义如下: 而其中的Point3d::magnitude()又定义如下: 答案是不明确的。C++支持三种类型的membe...

thanatos_y ⋅ 2016/07/09 ⋅ 0

虚析构函数的用处

http://www.cnblogs.com/lixiaohui-ambition/archive/2012/07/13/2589716.html g++ test.cpp -o test 下面这个测试可以说明virtual继承 与虚析构函数的作用 虚继承是解决多重继承中 继承同一...

lindt ⋅ 2016/11/29 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JPA入门,配置文件的设置

<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http......

码农屌丝 ⋅ 19分钟前 ⋅ 0

Java基础——面向对象和构造器

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 静态成员介绍 为什么要有静态成员?静态成员用来...

凯哥学堂 ⋅ 21分钟前 ⋅ 0

vmware中Centos 7 linux的LVM磁盘扩容

系统是RHEL7(centos7差不多一样) 关闭系统,在vmware、设置、硬盘、扩展、输入数字大于当前系统内存、点击扩展。 开机再查看磁盘信息 fdisk -l 注意:可以看出sda磁盘增加了,但是根目录还...

gugudu ⋅ 32分钟前 ⋅ 0

JAVA线程sleep和wait方法区别

昨天面试,突然被问到sleep 和 wait的区别,一下子有点蒙,在这里记一下,以示警戒。 首先说sleep,sleep就是正在执行的线程主动让出cpu,cpu去执行其他线程,在sleep指定的时间过去后,cpu...

徐玉强 ⋅ 34分钟前 ⋅ 0

vuex学习--模块

随着项目复杂性增加,共享状态也越来越多。需要对转态操作进行分组,分组后在进行分组编写。学习一下module:状态管理器的模块组操作。 首先是声明: const moduleA={ state,mutations,g...

大美琴 ⋅ 36分钟前 ⋅ 0

Selenium 简单入门

安装 pip install selenium 驱动下载 https://chromedriver.storage.googleapis.com/index.html 下载最新的驱动,放入path中,可以放入Python的scripts目录下,也可以放入Chrome安装目录,并...

阿豪boy ⋅ 37分钟前 ⋅ 0

292. Nim Game - LeetCode

Question 292. Nim Game Solution 思路:试着列举一下,就能发现一个n只要不是4的倍数,就能赢。 n 是否能赢1 true2 true3 true4 false 不论删除几,对方都能一把赢5 t...

yysue ⋅ 今天 ⋅ 0

6.5 zip压缩工具 6.6 tar打包 6.7 打包并压缩

zip压缩工具 zip命令可以压缩目录和文件,-r 压缩目录。 zip使用方法 zip 1.txt.zip 1.txt //压缩文件 zip -r 123.zip 123/ //压缩目录 unzip 1.txt.zip //解压 unzip 123.zip -d /root/456...

Linux_老吴 ⋅ 今天 ⋅ 0

react-loadable使用跳坑

官方给react-loadable的定义是: A higher order component for loading components with dynamic imports. 动态路由示例 withLoadable.js import React from 'react'import Loadable fro......

pengqinmm ⋅ 今天 ⋅ 0

记录工作中遇到的坑

1、ios safari浏览器向下滚动会触发window resize事件

端木遗风 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部