其目的是消除歧义。
当多个继承路径上存在公共基类时,在多个路径的汇合处,公共基类将生成多个实例(或多个副本)。如果只想保存基类的一个实例,可以将公共基类描述为虚拟基类。
虚拟基类的基本原则是在内存中只有其成员的一个副本。这样,通过将基类继承声明为虚继承,只能继承基类的一个副本,从而消除了歧义。使用虚拟限定符将基类继承描述为虚拟的。
虚拟函数和纯虚拟函数有以下区别。(1) 如果在类中声明了虚函数,则即使该函数为空,也会实现该函数。它的目的是使函数能够包含在其子类中。这样,编译器就可以使用后期绑定来实现多态性。纯虚函数只是一个接口,一个函数的声明,需要在子类中实现。(2) 虚拟函数不能在子类中重载,但是纯虚拟函数必须在子类中实现,就像Java接口一样。一般来说,在许多函数中添加虚拟元素是一个好习惯。虽然牺牲了一些性能,但是面向对象的多态性增加了,因为很难预测父类中的函数不在子类中,并且它的实现不会被修改。(3) 虚函数类用于“实现继承”,不仅继承接口,而且继承父类的实现。当然,你也可以完成你自己的实现。纯虚函数注重接口的统一性,通过子类实现。(4) 具有纯虚函数的类称为虚基类。这种基类不能直接生成对象。只有继承并重写虚拟函数后才能使用。这样的类也称为抽象类。在任何非虚拟基类构造函数之前调用虚拟基类的构造函数。如果构造中包含多个虚拟基类,则它们的调用顺序为声明顺序。如果虚拟类是从非虚拟类派生的,则首先调用非虚拟类的构造函数。
下面是一个示例:
class X:public y,virtual public Z
X one
调用顺序如下:
Z()//虚拟基类初始化
y()//非虚拟基类
X()//继承类
,即,编译器无法确认您是否在D中。在f()中调用哪个函数f。这可能会让人觉得有点奇怪。命名只定义了一个CA::F。因为每个人都从CA派生,所以它自然地被称为CA::F。为什么我们不能确定呢?
这是因为编译器在编译时需要确定子类的函数定义。例如,确定CA::F。然后,在编译CB和CC时,它还需要在编译器的语法树中生成CB::F、CC::F和其他标识符。然后,在编译CD时,由于CB和CC有一个函数f,编译器将尝试生成这两个CD::f标识符。很明显,此时会报告错误,为时已晚。
(当我们不使用CD::F时,不会生成上述任何标记,因此如果我们删除D.
要解决此问题,有两种方法:
1。重载函数f():此时由于我们已经明确定义了CD::f,编译器在检查CD::f()调用时不需要一步一步生成CD::f label;
此时CD的元素结构如下:| CB(CA)|
]| CC(CA)|
,所以sizeof(CD)=8(CB和CC各有一个元素K)
2。使用虚拟继承:虚拟继承也称为共享继承。这种共享实际上是在编译过程中实现的。当使用虚拟继承时,上面的程序将变成如下形式:class ca.
当派生类继承基类时,添加一个virtual关键字就是virtual基类继承,如:类派生:虚公共基类{}虚基类主要解决基类在多次继承中可能被多次继承的问题,虚基类主要为派生类提供基类,如:类B{}类D1:公共B{}类D2:公共B{}类C:公共D1,公共D2{},其中C继承自D1和D2,但有两个基类,这会造成混淆。所以我们使用虚拟基类,即:类B{}类D1:虚拟公共B{}类D2:虚拟公共B{}类C:公共D1,公共D2{}
域名是什么?可以自由买卖吗?你好,刚果。让我们来回答这个问题。网站由域名和空间组成。如果我们把网站看作一家公司,那么空间可以理解为你公司的大小,你工作的所有东西都存放在那里。域名是你公司的地址。当你乘出租车去上班时,你只要告诉司机地址,他就
如何把ipad照片导出到苹果笔记本?将苹果手机的照片和视频传输到电脑:方法1。将电脑与苹果手机连接,打开“我的电脑”,打开“我的iPhone”,打开“内部存储器”,打开“DCIM”,找到照片文件夹,然后查看照片和视频,复制并粘贴到电脑文件夹
c,r,s,t,s,e,a能组成什么单词?不是唯一的:演员演员演员演员演员演员投手,家具演员,演员演员演员演员演员演员演员演员演员演员演员演员演员演员演员演员演员演员演员演员演员演员演员演员演员演员演员演员演员演员演员演员演员演员演员演员演
怎样下载头条页面中出现的歌曲?关于如何下载标题音乐,我的方法如下:首先,在播放标题音乐视频的页面中,点击右下角的共享按钮,将共享界面向右滑动,直到看到“复制链接”第二,点击“复制链接”第三,打开手机浏览器,粘贴并打开链接;第四,点击播放视频
公司要做个网站,大概需要多少钱?该怎么做?你好,到目前为止,我已经做了几十个公司和个人网站,基本上涉及到各种行业网站,所以我给你以下建议。如果网站的访问量相对较小,也就是说每天不会超过10万,那么下面两个就是网站的硬性条件。1、入门级服务器
微信转账怎么使用?微信传输非常简单。你可以在朋友之间传送或扫描代码。但是你需要你的微信卡或者找零的钱。至于是否安全,需要多鉴定,看清数额,小心上当受骗如何正确运用微信?我们可以添加朋友,删除朋友,拉黑朋友,阻止朋友。在群组中,我们可以点击并
小米11充电特效怎么设置?1. 找到设置并单击“打开”。2. 单击打开显示。3. 找到屏幕效果。4. 通常,默认为智能模式。5. 您可以手动选择其他模式。6. 您也可以在搜索框中输入费用。7. 设置呼吸灯是否闪烁。小米11怎么设置充电特效?
ip开发什么意思?IP(知识产权)模块是指具有知识产权的模块,包括软IP、固定IP和硬IP。随着集成电路的发展和SOC复杂性的提高,IP已经成为SOC设计的技术基础,给IP的发展带来了巨大的商机,使IP成为一种商品,IP技术也日益成为IC产
企业邮箱帐号经常收到异地登录提醒怎么办?当您进入邮箱后台时,会有一个自助查询。您可以查看远程登录的时间是否是您在手机上登录或绑定邮箱的时间。由于国内网络特别是移动网络的IP不稳定,经常跳转到其他地区,所以会显示远程登录。如果你还担心,请更改
玄机丸是什东西有什功效?你问的是玄机丸。是给男人的。补益脾肾,提高免疫力,抗疲劳。使用后您会明白的