#include<iostream>
using namespace std;
class Base{
public:
Base()
{
a=;
cout<<"Base a="<<a<<endl;
}
protected:
int a;//如果这里是私有的变量,则在他的所有派生类中都不具有访问权限
//派生类只能直接访问基类 的公有和保护成员
//私有成员仅限于自己使用。
//保护成员则允许派生类使用,而不允许通过对象进行直接调用
//公有类是允许所有的调用
};
class Base1:virtual public Base{
public:
int b1;
Base1()
{
a=a+;
cout<<"Base1 a="<<a<<endl;
}
};
class Base2:virtual public Base{
public:
int b2;
Base2()
{
a=a+;
cout<<"Base2 a="<<a<<endl;
}
};
class Derived:public Base1,public Base2{
public:
int d;
Derived()
{
cout<<"Base1::a="<<Base1::a<<endl;
cout<<"Base2::a="<<Base2::a<<endl;
}
};
//定义虚基类是对同一个基类只复制一次。
//从本例函数执行结果看出:
//由Derived类的创建,会导致Base1类的创建,然后是Base2的创建
//要创建Base1类必先创建他的派生类Base
//Base类创建后接着Base1创建,然后此时Base类被调用了一次
//Base1类创建结束后再创建Base2.
//因为是虚继承,Base已经被调用过一次,此时它不再调用Base类
//Base2会用在Base1创建的基础上调用的Base类的值。
//在所有的基类被依次创建后,然后再创建 最底层的派生类Derived
int main()
{
Derived obj;
return ;
}
/*
在虚继承时的执行结果
Base a=5
Base1 a=15
Base2 a=35
Base1::a=35
Base2::a=35
*/
/*
在非虚继承时执行的结果
Base a=5
Base1 a=15
Base a=5
Base2 a=25
Base1::a=15
Base2::a=25
*/

C++派生类继承的理解的更多相关文章

  1. C++中public,protected,private派生类继承问题和访问权限问题

    C++中public,protected,private派生类继承问题和访问权限问题 当一个子类从父类继承时,父类的所有成员成为子类的成员,此时对父类成员的访问状态由继承时使用的继承限定符决定. 1. ...

  2. C++//菱形继承 //俩个派生类继承同一个基类 //又有某个类同时继承俩个派生类 //成为 菱形继承 或者 钻石 继承//+解决

    1 //菱形继承 2 //俩个派生类继承同一个基类 3 //又有某个类同时继承俩个派生类 4 //成为 菱形继承 或者 钻石 继承 5 6 #include <iostream> 7 #i ...

  3. 关于Java抽象类,接口与实现接口及派生类继承基类

    1. 抽象类 抽象类就是有一个或多个方法只被声明而未被实现. 抽象方法的声明以分号结束,并且用关键字abstract来说明它以标识它为抽象方法. 格式: public abstract class 类 ...

  4. C++派生类继承父类修饰符

    公式: 继承成员对外的访问属性 = Max{继承方式,父类成员访问级别}: 1.如果子类从父类继承时使用的继承限定符是public,那么(1)父类的public成员成为子类的public成员,允许类以 ...

  5. c#序列化基类(包含派生类继承DynamicObject和 IXmlSerializable)对象

    直接上代码 using System.Diagnostics; using System.Text; using System.Xml; using System.Xml.Schema; using ...

  6. C++继承具体解释之二——派生类成员函数具体解释(函数隐藏、构造函数与兼容覆盖规则)

    在这一篇文章開始之前.我先解决一个问题. 在上一篇C++继承详解之中的一个--初探继承中,我提到了在派生类中能够定义一个与基类成员函数同名的函数,这样派生类中的函数就会覆盖掉基类的成员函数. 在谭浩强 ...

  7. C++中的类继承(2)派生类的默认成员函数

    在继承关系里面, 在派生类中如果没有显示定义这六个成员 函数, 编译系统则会默认合成这六个默认的成员函数. 构造函数. 调用关系先看一段代码: class Base { public : Base() ...

  8. C++ 继承 - 在派生类中对基类初始化

    构造函数与基类的其他成员不同,不能被派生类继承,因此为了初始化基类中的成员变量,需要在派生类中调用基类的构造函数(即显式调用),如果派送类没有调用则默认调用基类的无参构造函数(即隐式调用). 显式调用 ...

  9. 基础学习:关于this在派生类构造函数中的理解

    https://www.cnblogs.com/Bear-Study-Hard/archive/2006/01/09/313551.html 看了上面这篇文章有感,特做了个小样板,以加深对于this在 ...

随机推荐

  1. ionic 组件学习

    利用css列表多选框: <div class="{{Conceal}}" > <ion-checkbox color="secondary" ...

  2. Ubuntu—查看进程并关闭进程

    环境:Ubuntu终端 命令:ps -aux 功能:查看进程信息 命令:kill 进程号(PID) 功能:杀死进程

  3. [转载] RCNN/SPP/FAST RCNN/FASTER RCNN/YOLO/SSD算法简介

    RCNN: RCNN(Regions with CNN features)是将CNN方法应用到目标检测问题上的一个里程碑,由年轻有为的RBG大神提出,借助CNN良好的特征提取和分类性能,通过Regio ...

  4. BZOJ 4557 JLOI2016 侦查守卫 树形dp

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4557 题意概述: 给出一棵树,每个点付出代价w[i]可以控制距离和它不超过d的点,现在给 ...

  5. Javascript闭包演示【转】

    文章出自http://www.cnblogs.com/snandy/archive/2011/03/01/1967628.html 有个网友问了个问题,如下的html,为什么点击所有的段落p输出都是5 ...

  6. hosts_allow配置了却不生效

    hosts_allow配置了却不生效 配置了两台白名单的机器,一台生效一台不生效,google后的结果都是更新libwrap.so  安装openssh等等..(问题还是没有解决) 经过对比发现,原来 ...

  7. OSG学习:移动/缩放/旋转模型

    移动和缩放以及旋转都是对矩阵进行操作,这些操作如果要叠加直接矩阵相乘就可以了. 下面的示例代码中,加入了四个bignathan,一个是默认加入在最中间,一个向上移2单位,一个是向下移2单位且缩放0.5 ...

  8. 用SC命令 添加或删除windows服务提示OpenSCManager 失败5 拒绝访问

    在安装命令行中安装  windowsOpenSCManager 失败5  的错误,原因是当前用户的权限不足,需要做的是在注册表 HKEY_LOCAL_MACHINE\Software\Microsof ...

  9. DAY1敏捷冲刺

    站立式会议 工作安排 (1)服务器配置 (2)数据库建表 (3)页面初步样式设计 (4)主要页面之间的交互 燃尽图 代码提交记录 感想 林一心:后端云服务器的配置确实是一个挑战,目前还在摸索中 赵意: ...

  10. Delphi Dataset CurValue

    TField.CurValue Property Represents the current value of the field component including changes made ...