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

西安的电商平台网站建设新闻联播今日新闻

西安的电商平台网站建设,新闻联播今日新闻,做网站的图片需要多少钱,界面设计与制作专业学什么多继承(Multiple Inheritance) 是指从多个直接基类中产生派生类的能力,多继承的派生类继承了所有父类的成员。尽管概念上非常简单,但是多个基类的相互交织可能会带来错综复杂的设计问题,命名冲突就是不可回避的一个。…

多继承(Multiple Inheritance)

是指从多个直接基类中产生派生类的能力,多继承的派生类继承了所有父类的成员。尽管概念上非常简单,但是多个基类的相互交织可能会带来错综复杂的设计问题,命名冲突就是不可回避的一个。

注意: 多继承时很容易产生命名冲突,即使我们很小心地将所有类中的成员变量和成员函数都命名为不同的名字,命名冲突依然有可能发生,比如典型的是菱形继承。

A
B
C
D

基类 A 派生出类 B 和类 C,子类 D 继承自类 B 和类 C。
这个时候类 A 中的成员变量和成员函数继承到类 D 中变成了两份,一份来自 A–>B–>D 这条路径,另一份来自 A–>C–>D 这条路径。

这样的问题在于,在D类中使用或者访问基类A中的成员函数、成员变量时会产生歧义。编译器不知道它是来着A–>B–>D,还是来自A–>C–>D这条路径。

//间接基类A
class A{
protected:int m_a;
};//直接基类B
class B: public A{
protected:int m_b;
};//直接基类C
class C: 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(){D d;return 0;
}

这段代码实现了上图所示的菱形继承,D类中,成员函数代码试图直接访问成员变量 m_a,结果发生了错误,因为类 B 和类 C 中都有成员变量 m_a(从 A 类继承而来),编译器不知道选用哪一个,所以产生了歧义。

为了消除歧义,可以在访问的时候给他标明是来自哪一个类的,比如以下代码

void seta(int a){ C::m_a = a; }  //表明这个成员函数是通过 A-->C-->D 这条路径//或者这样
void seta(int a){ B::m_a = a; }  //表明这个成员函数是通过 A-->B-->D 这条路径

虚继承(Virtual Inheritance)

为了解决多继承时的命名冲突和冗余数据问题,C++ 提出了虚继承,使得在派生类中只保留一份间接基类的成员。
在继承方式前面加上 virtual 关键字就是虚继承,比如以下代码中展示的

//间接基类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(){D d;return 0;
}

这段代码使用虚继承重新实现了上图所示的菱形继承,这样在派生类 D 中就只保留了一份成员变量 m_a,直接访问就不会再有歧义了。

虚继承的目的是让某个类做出声明,承诺愿意共享它的基类。其中,这个被共享的基类就称为虚基类(Virtual Base Class),本例中的 A 就是一个虚基类。在这种机制下,不论虚基类在继承体系中出现了多少次,在派生类中都只包含一份虚基类的成员。

虚继承
虚继承
A
B
C
D

必须在虚派生的真实需求出现前就已经完成虚派生的操作
虚派生只影响从指定了虚基类的派生类中进一步派生出来的类,它不会影响派生类本身
理由: 在上图中,当定义 D 类时才出现了对虚派生的需求,但是如果 B 类和 C 类不是从 A 类虚派生得到的,那么 D 类还是会保留 A 类的两份成员。

建议:能用单一继承解决的问题就不要使用多继承

http://www.rdtb.cn/news/19639.html

相关文章:

  • 做网络兼职网站有哪些营销型网站制作
  • 1元购网站建设互联网服务平台
  • 网站开发属于专利吗中国互联网协会官网
  • 新疆生产建设兵团12师网站头条新闻最新消息
  • wordpress主题dux 5.0seo引擎搜索网站关键词
  • 企业网站建设 管理 维护 请找想找搜索引擎优化
  • web前端个人简历seo关键词推广
  • 什么公司做网站的多南宁网站建设服务公司
  • 模板设计器廊坊seo建站
  • 天津市城乡和住房建设厅网站站长工具的网址
  • 自己有主机怎么做论坛网站seo推广有哪些
  • 有做机械工装的网站吗chrome谷歌浏览器官方下载
  • 展示形网站开发app平台搭建需要多少钱
  • 网站空间已过期百度站长平台网站收录
  • 网站建设技术服务费怎么写分录提升神马关键词排名报价
  • 网站建设公司权威机构seosem是指什么意思
  • 北京做公司网站的公司快速提升网站关键词排名
  • 顺义成都网站建设seo关键词推广价格
  • 群晖安装多个wordpressseo网站优化策划书
  • 做图哪个网站素材多网站seo设置是什么
  • 化妆品网站开发的背景百度竞价推广方法
  • 关键词优化外包服务优化关键词规则
  • 临颖网站建设策划方案模板
  • 长春企业做网站百度一下你知道主页官网
  • 网络推广营网络营销外包西安百度首页优化
  • 定兴网站建设站长工具查询
  • 做信息安全的网站国内建站平台有哪些
  • iis 网站 端口手游推广渠道
  • 网站扫二维码怎么做天津seo网络
  • 怎么把网站上的通栏教育培训机构有哪些