设置虚基类的目的是

设置虚基类的目的是,第1张

设置虚基类的目的是提高程序运行效率。

当在多条继承路径上有一个公共的基类,在这些路径中的某几条汇合处,这个公共的基类就会产生多个实例,若只想保存这个基类的一个实例,可以将这个公共基类说明为虚基类。

在继承中产生歧义的原因有可能是继承类继承了基类多次,如概述图所示,子类C最后会接受分别来自A和B的同一个或多个相同拷贝,从而产生了多个拷贝,即不止一次的通过多个路径继承类在内存中创建了基类成员的多份拷贝。

而这些是A和B从父类继承而来,所以C类该继承A还是B传下来的还是都接受呢?这样就产生歧义,虚基类的基本原则是在内存中只有基类成员的一份拷贝。这样,通过把基类继承声明为虚拟的,就只能继承基类的一份拷贝,从而消除歧义。

从虚基类直接或间接派生的派生类中的构造函数的成员初始化列表中都要列出对虚基类构造函数的调用。但仅仅用建立对象的最远派生类的构造函数调用虚基类的构造函数,而该派生类的所有基类中列出的对虚基类的构造函数的调用在执行中被忽略。

A.

简化程序,和纯虚函数没关系

B.

消除二义性。正解, 虚基类是为了强调"这个类型的某些方法没有意义, 只是为了继承, 不要构造这种类型的对象"

C.

提高运行效率 ,和纯虚函数没关系

D.

减少目标代码,纯虚函数和空函数相比相差也就是几个字节, 如果这也算的话确实是减少了。

首先要知道C++是少数几个支持“多继承”的语言。

多继承会带来很多问题,其中一个就是菱形继承:

class A

class B : public A

class C: public A

class D : public B, public C

此时D的实例中会有两个A,为了解决这个问题,引入了virtual base class的概念

在实际的开发中,会避免这种情况。基本上都是继承一个类,实现多个“接口”

C++中没有接口的概念。但是一个只有纯虚函数的类本质上就是一个接口。

C++中也没有实现接口的概念,但是,继承一个只有纯虚函数的类本质上就是实现一个接口

C++中的多继承一般是这么用的。这样降低了设计的复杂度,减少问题的出现


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/11197413.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存