`
韩冬冬
  • 浏览: 13524 次
  • 性别: Icon_minigender_1
  • 来自: 天津
最近访客 更多访客>>
社区版块
存档分类
最新评论

c++ 类的虚拟继承

阅读更多
有一个基类:
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++虚拟继承举例及其代码

    c++虚拟继承的一个典型例子,通过这个例子可以让初学者从根本体会到虚拟继承是怎么回事

    C++虚拟多重继承对象模型讨论-样例

    仅仅是一个讨论使用的样例程序,详细内容参考:http://blog.csdn.net/magictong/article/details/22202393

    关于C++中虚拟继承的一些总结分析

    1.为什么要引入虚拟继承虚拟继承是多重继承中特有的概念。...虚拟继承在一般的应用中很少用到,所以也往往被忽视,这也主要是因为在C++中,多重继承是不推荐的,也并不常用,而一旦离开了多重继承,虚拟继承就完

    C++ 虚继承对基类构造函数调用顺序的影响

    可见性继承比较简单,而虚拟继承对学习c++的难度较大。  首先,虚拟继承与普通继承的区别有:  假设derived 继承自base类,那么derived与base是一种“is a”的关系,即derived类是base类,而反之错误;  ...

    从汇编看c++的虚拟继承以及其内存布局

    先看第一种简单的情形,所有类中没有任何虚函数的菱形继承。  下面是c++源码: class Top {//虚基类 public:  int i;  Top(int ii) {  i = ii;  } }; class Left : public virtual Top { public: ...

    实验四、类的继承与派生 类的继承与派生

    类的继承与派生 注释详细 虚拟继承,派生对象访问 操作多多

    C++的虚拟继承机制

    比如:虚函数必须要通过一种间接的运行时(而不是编译时)机制才能够激活(调用)的函数,而虚继承也是必须在运行时才能够进行定位访问的一种体制。存在,但间接。其中关键在于存在、间接和共享这三种特征。

    Java的interface观念与C++多重继承比较

    因为C++的虚拟函数可以有纯虚拟函数,也可有非纯虚拟函数,而Java只有抽象函数,所以功能模式少一种,自然能达到的效果较少一些。 但这并不代表Java的interface就比较差,因为interface的观念较简单,全部动态的抽象...

    C++面向对象技术完全剖析_源代码(继承,封装,多态,虚函数,纯虚函数,虚拟继承,多重继承,函数重载,指针……)

    3、体现继承 虚拟继承(要通过至少三层 父类父类子类) 虚函数 (3层 纵向关系) 水平方向上:体现出继承顺序 先虚拟继承 再普通继承 通过实例化类 体现对象构造和析构的顺序 还要有函数重载 指针 指针悬挂 无参...

    C++ 多重继承和虚拟继承对象模型、效率分析

    C++多态通过继承和动态绑定实现。继承是一种代码或者功能的传承共享,从语言的角度它是外在的、形式上的,极易理解。而动态绑定则是从语言的底层实现保证了多态的发生——在运行期根据基类指针或者引用指向的真实...

    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 虚析构函数

    C++编程思想习题

    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++对象模型(清晰版).pdf

    本书专注于C++面向对象程序设计的底层机制,包括结构式语意、临时性对象的生成、封装、继承,以及虚拟——虚拟函数和虚拟继承。这本书让你知道:一旦你能够了解底层实现模型,你的程序代码将获得多么大的效率。...

    C++中virtual继承的深入理解

    ————————————————————— 表示虚拟继承,和普通继承是C++的两种继承方式。 例如B1、B2 继承A 而C多重继承B1、B2 如果普通继承则C包含两份A的拷贝,分别来自于B1、B2 而虚拟继承则只包含一份A...

    C++对象模型

    《深度探索C++对象模型》重点探索"对象导向程序所支持的C++对象模型"下的程序行为。...专注于C++对象导向程序设计的底层机制,包括结构式语意、暂时性对象的生成、封装、继承,以及虚拟——虚拟函数和虚拟继承。

    深度探索C++对象模型 PDF中文清晰版

    《深度探索C++对象模型》专注于C++面向对象程序设计的底层机制,包括结构式语意、临时性对象的生成、封装、继承,以及虚拟——虚拟函数和虚拟继承。这本书让你知道:一旦你能够了解底层实现模型,你的程序代码将获得...

    Advanced.C++.Programming.Styles.and.Idioms (Advanced C++中文版)

    这些方法是围绕C++支持的抽象机制实施的:抽象数据类型,继承结构中的组合类型,面向对象程序设计以及多重继承。本书还展示了C++语言间接支持的核心习惯用法,诸如虚拟构造函数、原型对象以及高级垃圾收集技术。 ...

Global site tag (gtag.js) - Google Analytics