有一个基类:
class Animal
{
public:
Animal();
void setWeight(float weight);
float getWeight();
private:
float weight;
}
有两个Animal类的派生类:
class ma:public Animal
{
public:
ma();
void run();
}
class lv:public Animal
{
public:
lv();
void roar();
}
定义一个派生类 luozi 继承 ma 和 lv
class luozi: public ma,public lv
{
public:
luozi();
void printStr();
}
当定义一个luozi类对象时:
luozi lz;
lz.setWeight(20);//错误:此时这个对象拥有两个Animal对象,编译器不知道为哪个对象赋值,此时应该将ma和lv继承Animal的方式改为public virtual(虚拟继承),这样lz对象就会拥有一个Animal对象
分享到:
相关推荐
c++虚拟继承的一个典型例子,通过这个例子可以让初学者从根本体会到虚拟继承是怎么回事
仅仅是一个讨论使用的样例程序,详细内容参考:http://blog.csdn.net/magictong/article/details/22202393
1.为什么要引入虚拟继承虚拟继承是多重继承中特有的概念。...虚拟继承在一般的应用中很少用到,所以也往往被忽视,这也主要是因为在C++中,多重继承是不推荐的,也并不常用,而一旦离开了多重继承,虚拟继承就完
可见性继承比较简单,而虚拟继承对学习c++的难度较大。 首先,虚拟继承与普通继承的区别有: 假设derived 继承自base类,那么derived与base是一种“is a”的关系,即derived类是base类,而反之错误; ...
先看第一种简单的情形,所有类中没有任何虚函数的菱形继承。 下面是c++源码: class Top {//虚基类 public: int i; Top(int ii) { i = ii; } }; class Left : public virtual Top { public: ...
类的继承与派生 注释详细 虚拟继承,派生对象访问 操作多多
比如:虚函数必须要通过一种间接的运行时(而不是编译时)机制才能够激活(调用)的函数,而虚继承也是必须在运行时才能够进行定位访问的一种体制。存在,但间接。其中关键在于存在、间接和共享这三种特征。
因为C++的虚拟函数可以有纯虚拟函数,也可有非纯虚拟函数,而Java只有抽象函数,所以功能模式少一种,自然能达到的效果较少一些。 但这并不代表Java的interface就比较差,因为interface的观念较简单,全部动态的抽象...
3、体现继承 虚拟继承(要通过至少三层 父类父类子类) 虚函数 (3层 纵向关系) 水平方向上:体现出继承顺序 先虚拟继承 再普通继承 通过实例化类 体现对象构造和析构的顺序 还要有函数重载 指针 指针悬挂 无参...
C++多态通过继承和动态绑定实现。继承是一种代码或者功能的传承共享,从语言的角度它是外在的、形式上的,极易理解。而动态绑定则是从语言的底层实现保证了多态的发生——在运行期根据基类指针或者引用指向的真实...
8.4 虚拟继承 8.4.1 简单虚继承(无重复继承) 8.4.2 菱形继承(含重复继承、多继承情况) 8.5 相关问题 8.5.1 对象大小问题 8.5.2 静态绑定与动态绑定 8.5.3 函数成员访问 8.5.4 多态的实现 8.5.5 虚析构函数
14.9析构函数和虚拟析构函数 14.10小结 14.11练习 第15章 模板和包容器类 15.1包容器和循环子 15.2模板综述 15.2.1C方法 15.2.2Smalltalk方法 15.2.3模板方法 15.3模板的语法 15.3.1非内联函数定义 15.3.2栈模板...
C++常识,可以对c++有基本认识,C++类。继承、多太、虚拟函数。。。。的详细介绍
本书专注于C++面向对象程序设计的底层机制,包括结构式语意、临时性对象的生成、封装、继承,以及虚拟——虚拟函数和虚拟继承。这本书让你知道:一旦你能够了解底层实现模型,你的程序代码将获得多么大的效率。...
————————————————————— 表示虚拟继承,和普通继承是C++的两种继承方式。 例如B1、B2 继承A 而C多重继承B1、B2 如果普通继承则C包含两份A的拷贝,分别来自于B1、B2 而虚拟继承则只包含一份A...
《深度探索C++对象模型》重点探索"对象导向程序所支持的C++对象模型"下的程序行为。...专注于C++对象导向程序设计的底层机制,包括结构式语意、暂时性对象的生成、封装、继承,以及虚拟——虚拟函数和虚拟继承。
《深度探索C++对象模型》专注于C++面向对象程序设计的底层机制,包括结构式语意、临时性对象的生成、封装、继承,以及虚拟——虚拟函数和虚拟继承。这本书让你知道:一旦你能够了解底层实现模型,你的程序代码将获得...
这些方法是围绕C++支持的抽象机制实施的:抽象数据类型,继承结构中的组合类型,面向对象程序设计以及多重继承。本书还展示了C++语言间接支持的核心习惯用法,诸如虚拟构造函数、原型对象以及高级垃圾收集技术。 ...