当前位置: 首页 > news >正文

哪里网站书最全培训机构网站制作

哪里网站书最全,培训机构网站制作,苏州园区网站开发,在线呼叫网页版C棱形继承 在 C 中,在使用 多继承 时,如果发生了如果类 A 派生出类 B 和类 C,类 D 继承自类 B 和类 C,这时候就发生了菱形继承。 如果发生了菱形继承,这个时候类 A 中的 成员变量 和 成员函数 继承到类 D 中变成了两…

C++棱形继承

在 C++ 中,在使用 多继承 时,如果发生了如果类 A 派生出类 B 和类 C,类 D 继承自类 B 和类 C,这时候就发生了菱形继承。

如果发生了菱形继承,这个时候类 A 中的 成员变量 和 成员函数 继承到类 D 中变成了两份

一份来自 A–>B–>D 这条路径,另一份来自 A–>C–>D 这条路径。如下图所示:

在这里插入图片描述
在一个派生类中保留间接基类的多份同名成员,虽然可以在不同的成员变量中分别存放不同的数据,但大多数情况下这是多余的:因为保留多份成员变量不仅占用较多的存储空间,还容易产生命名冲突

假如类 A 有一个成员变量 a,那么在类 D 中直接访问 a 就会产生歧义,编译器不知道它究竟来自 A -->B–>D 这条路径,还是来自 A–>C–>D 这条路径

为了解决菱形继承出现的数据冗余的问题,C++ 提出了虚继承,虚继承使得派生类中只保留一份间接基类的成员

C++虚继承

虚继承的目的是让某个类做出声明,承诺愿意共享它的基类

其中,这个被共享的基类就称为虚基类(Virtual Base Class),菱形继承中的顶层类 就是一个虚基类

在这种机制下,不论虚基类在继承体系中出现了多少次,在派生类中都只包含一份虚基类的成员

虚继承关系,如下图所示:

在这里插入图片描述
观察这个新的继承体系,我们会发现虚继承的一个不太直观的特征:

必须在虚派生的真实需求出现前就已经完成虚派生的操作。在上图中,当定义 D 类时才出现了对虚派生的需求,但是如果 B 类和 C 类不是从 A 类虚派生得到的,那么 D 类还是会保留 A 类的两份成员。

换个角度讲,虚派生只影响从指定了虚基类的派生类中进一步派生出来的类,它不会影响派生类本身。

在实际开发中,位于中间层次的基类将其继承声明为虚继承一般不会带来什么问题。通常情况下,使用虚继承的类层次是由一个人或者一个项目组一次性设计完成的。对于一个独立开发的类来说,很少需要基类中的某一个类是虚基类,况且新类的开发者也无法改变已经存在的类体系。

C++ 标准库中的 iostream 类就是一个虚继承的实际应用案例。iostreamistreamostream 直接继承而来,而 istreamostream 又都继承自一个共同的名为 base_ios 的类,是典型的菱形继承。此时 istreamostream 必须采用虚继承,否则将导致 iostream 类中保留两份 base_ios 类的成员。

iostream 继承体系如下图:

在这里插入图片描述

使用案例:

#include <iostream>
using namespace std;
// 间接基类A
class A
{
protected:int m_a;
};
// 直接基类B
class B: virtual public A
{
protected:int m_b;
};
// 直接基类C
class C: virtual public A
{
protected:int m_c;
};
//派生类D
class D: public B, public C
{
public:void seta(int a){ m_a = a;   //命名冲突}void setb(int b){ m_b = b;   //正确}void setc(int c){ m_c = c;   //正确}  void setd(int d){ m_d = d;   //正确}  
private:int m_d;
};
int main()
{cout << "嗨客网(www.haicoder.net)\n" << endl;D d;return 0;
}

C++虚继承构造函数

普通的 继承 时,我们可以在子类直接显式的调用父类的 构造函数,在 虚继承 中,虚基类是由最终的派生类初始化的。

也就是说,最终派生类的构造函数必须要调用虚基类的构造函数

对最终的派生类来说,虚基类是间接基类,而不是直接基类。这跟普通继承不同,在普通继承中,派生类构造函数中只能调用直接基类的构造函数,不能调用间接基类的。

http://www.15wanjia.com/news/177036.html

相关文章:

  • 网站建设问卷做网站有哪些费用
  • 下载个网上销售网站昆明网站建设猫咪科技
  • 企业建站模板多少钱商城版网站建设
  • 海宁高端高端网站设计网站地区分站系统
  • 免费网站建设服务电影网站建设目的
  • 东莞专业全网推广建站公司自己制作动漫的软件
  • dw网站设计作品wordpress vantage premium
  • 淄博网站优化服务信息查询系统
  • 设计师网站有哪些销售定制家具兰州网站建设科技公司
  • 怎样联系自己建设网站微信怎么弄自己的小程序
  • 宁夏建设工程造价网站电子游戏十大正规官方网址
  • 网站seo推广软件网站通cms
  • 做搜狗网站排名软管理咨询的主体包括哪些
  • 河南开封网站建设西安网站设计建设公司 交通
  • 域名注册后怎么建设网站旅游网站色彩搭配
  • 无水印做海报的网站网站推广服务外包
  • 最好建网站系统的软件在本地搭建wordpress
  • 高性能网站开发500亿网站建设
  • 公司开发网站流程wordpress虚拟主机安装
  • 佛山移动网站建设公司wordpress最新中文版下载
  • 国外有哪些设计网站导购网站怎么做的
  • 做美食网站的目的中华网军事
  • 网络实施方案大连网站优化多少钱
  • 网站建设 域名 服务器wordpress 媒体库地址
  • 系统那个网站好交城有做网站的吗
  • 商业网站是怎么做的wordpress电影资源网站
  • 株洲做网站需要多少钱房屋设计找什么公司
  • 泽国镇规划建设局网站如何做一款app
  • 百度seo网站优化商城购物网站设计内容
  • 中国建设银行招聘网站报名系统wordpress边栏时间