专栏首页程序员C++之多继承

C++之多继承

C++支持多继承,其它的面向对象编程语言几乎都不支持多继承。而多继承一旦使用不当就会造成二义性。这可能就是其它语言都不支持多继承的原因。实际来看,几乎没有使用多继承的必要性。

下面来段代码展示一下多继承和二义性。

#pragma once
#include<iostream>

using std::cout;
using std::endl;

class MyClass
{
public:
	int a;
	int b;
};

class C1 : public MyClass
{
public:
};

class C2 : public MyClass
{
public:
};

class Last : public C1, public C2			//多继承
{

};

Last类继承自C1和C2类。C1和C2都是继承自MyClass类。

#include"MyClass.h"

int main()
{
	Last L;

	L.a;		//二义性

	return 0;
}

编译这段代码,会有如下的错误提示。

它明确的告知你访问不明确。

除非我们明确支持它是调用哪个父类的成员。这样才不会造成二义性。

	L.C1::a;		
	L.C2::b;

基于此,C++设计了虚继承来解决上述问题的出现。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C++之虚继承

    如果一个类从多个类继承而来,而这些类有公共基类。那么在多该基类中定义的成员访问时会出现二义性。C++设计虚继承来解决这个问题。虚继承的本质就是子类引用父类的内存...

    zy010101
  • 插入排序与希尔排序

    插入排序描述:有一个数组num[n];它有n个元素,假设其中n-1已经排好序了,那么把剩余的那个元素插入到合适的位置即可,这样就完成了排序。根据这个思想,很明显...

    zy010101
  • PAT(乙级)1019

    分析:这个题目,没什么难度。但是我被超时问题困扰了一会儿,可能是scanf函数用的次数有点多,所以改了一下,直接通过了。

    zy010101
  • 【java】关于java类和对象,你想知道的在这里!

    java类的基本组成 java作为一门面向对象的语言, 类和对象是最重要的概念之一,下面,就让我们来看看java中类的基本结构是怎样的: 一个简单的java类主...

    外婆的彭湖湾
  • 23种设计模式详解(六)

    南风
  • (52) 抽象容器类 / 计算机程序的思维逻辑

    查看历史文章,请点击上方链接关注公众号。 从38节到51节,我们介绍的都是具体的容器类,上节我们提到,所有具体容器类其实都不是从头构建的,它们都继承了一些抽象容...

    swiftma
  • Java方法的嵌套与递归调用

    方法嵌套的概念其实比较好理解,就是在调用方法的过程中又遇到了方法的调用,在刚开始接触的时候虽然在逻辑上能够理解为什么运行结果是这样的,但是对于代码执行的过程还是...

    聚沙成塔
  • 代理模式

    mySoul
  • Head First设计模式——蝇量模式和解释器模式

    在一个设计房子的平台中,周围要加上一些树,树有一个坐标XY坐标位置,而且可以根据树的年龄动态将自己绘制出来。如果我们创建许多树之后,会有许多树的实例对象。使用一...

    SpringSun
  • 自治的对象才是好对象

    当我们将对象的行为看作职责时,就赋予了对象的生命与意识,使得我们能够以拟人的方式对待对象。一个聪明的对象是对象自己知道应该履行哪些职责,拒绝履行哪些职责,以及该...

    张逸

扫码关注云+社区

领取腾讯云代金券