`
韩冬冬
  • 浏览: 14271 次
  • 性别: 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++虚拟多重继承对象模型讨论-样例

    这种继承方式的主要目的是解决“菱形问题”(Diamond Problem),即在非虚拟继承的多重继承中,派生类可能会有多于一份基类子对象,导致二义性。本篇讨论将深入探讨虚拟多重继承的对象模型,以及如何通过样例程序来...

    C++虚拟继承举例及其代码

    在C++编程语言中,虚拟继承(Virtual Inheritance)是一种特殊的继承方式,它解决了一类称为“菱形问题”或多继承中的二义性问题。在本篇内容中,我们将深入探讨虚拟继承的概念、作用以及如何在实践中应用。通过一个...

    C++多继承Demo

    在C++编程语言中,多继承是一种特性,允许一个派生类从多个基类继承属性和行为。这个特性使得代码重用更为灵活,但同时也带来了潜在的问题,如菱形问题和二义性。本示例"**C++多继承Demo**"通过包含源代码文档...

    实现c++类的多重继承的例程

    虚拟继承确保了多继承路径上的基类只被继承一次,从而避免了二义性。 在实际编程中,多重继承应当谨慎使用,因为它可能导致复杂性增加和代码维护困难。然而,在某些特定场景下,如接口实现或组合多个功能组件,多重...

    c++ 实现虚拟文件系统

    根据给定的信息,我们可以推断出作者正在尝试使用C++实现一个简单的虚拟文件系统。下面将详细介绍该虚拟文件系统的组成部分及其工作原理。 ### 一、虚拟文件系统结构 #### 1. `diskIniTop` 结构体 这个结构体包含...

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

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

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

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

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

    在C++中,虚拟继承(virtual inheritance)是一种解决多重继承中“菱形问题”的机制,它确保了子类中只有一个共享基类实例。这个特性在内存布局和对象构造上都有特殊的影响。我们来深入理解一下这个概念。 首先,让...

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

    `CStudent` 类使用了虚拟继承 `public virtual CPeople`,这是一个特殊的继承方式,它可以防止多继承时可能出现的二义性问题。如果一个派生类直接和间接地从同一个基类继承,那么虚拟继承确保基类的数据成员只有一份...

    C++类的练习_c++类综合练习_C++_c++类练习_

    C++支持单继承、多继承和虚拟继承。 10. **多态**:多态允许不同的对象对同一消息做出不同的响应。C++通过虚函数和纯虚函数实现多态,子类可以重写基类的虚函数,实现功能的扩展。 11. **静态成员**:静态成员属于...

    类的继承、派生、多态性C++课程实验报告.pdf

    在C++语言中,虚拟继承是指一个类继承另一个类,但避免了多重派生的歧义性。虚拟继承可以解决多继承时可能出现的歧义性问题。在本实验中,我们使用了虚拟继承来避免多重派生的歧义性。 三、多态性 多态性是指一个...

    C++多继承的详解教程

    1. **基本方案**:阐述多继承的基础方案,解决歧义的基本策略,以及虚拟函数的实现方式。 2. **处理同一继承格子中多次包含的类**:讨论当一个类在继承格子中被多次引用时如何处理。程序员可以选择是否为重复包含的...

    C++的虚拟继承机制

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

    24.C++解决重复继承的问题1

    在C++编程语言中,重复继承是指一个派生类从两个或多个基类中继承,而这些基类可能有一个共同的祖先。这种情况下,如果共同祖先(基类)中存在同名成员,编译器就会遇到二义性问题,因为不知道应该使用哪个基类中的...

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

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

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

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

    讲解C++多继承

    然而,虚拟继承也有其代价,包括额外的内存开销和更复杂的构造函数调用顺序。 总的来说,多继承在C++中是一个强大的工具,可以用于构建复杂而灵活的类层次结构。然而,它也带来了二义性和菱形问题等挑战,需要谨慎...

    多重继承(6_7钻石继承问题)_C++_

    为了解决这个问题,C++引入了**虚拟继承(virtual inheritance)**的概念。在声明基类时,我们可以使用`virtual`关键字,比如`class B : virtual public A`,这样B就虚拟地继承了A。虚拟继承确保所有通过虚拟基类...

Global site tag (gtag.js) - Google Analytics