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

厦门专业网站设计代理软件网站排行榜

厦门专业网站设计代理,软件网站排行榜,wordpress同行者画廊,广东省建设工程交易中心复杂的菱形继承及菱形虚拟继承 复杂的菱形继承及菱形虚拟继承虚拟继承解决数据冗余和二义性的原理笔试面试题 复杂的菱形继承及菱形虚拟继承 单继承:一个子类只有一个直接父类时称这个继承关系为单继承 多继承:一个子类有两个或以上直接父类时称这个继…

复杂的菱形继承及菱形虚拟继承

  • 复杂的菱形继承及菱形虚拟继承
  • 虚拟继承解决数据冗余和二义性的原理
  • 笔试面试题

复杂的菱形继承及菱形虚拟继承

  • 单继承:一个子类只有一个直接父类时称这个继承关系为单继承
    在这里插入图片描述

  • 多继承:一个子类有两个或以上直接父类时称这个继承关系为多继承
    在这里插入图片描述

  • 菱形继承:菱形继承是多继承的一种特殊情况。(不推荐用,坑!)
    在这里插入图片描述


菱形继承的问题:从下面的对象成员模型构造,可以看出菱形继承有数据冗余和二义性的问题。在Assistant的对象中Person成员会有两份。
在这里插入图片描述

class Person
{
public:string _name; // 姓名
};
class Student : public Person
{
protected:int _num; //学号
};
class Teacher : public Person
{
protected:int _id; // 职工编号
};
class Assistant : public Student, public Teacher
{
protected:string _majorCourse; // 主修课程
};
void Test()
{// 这样会有二义性无法明确知道访问的是哪一个Assistant a;a._name = "peter";//会报错("Assistant::_name不明确")// 需要显示指定访问哪个父类的成员可以解决二义性问题,但是数据冗余问题无法解决a.Student::_name = "xxx";a.Teacher::_name = "yyy";
}

虚拟继承可以解决菱形继承的二义性和数据冗余的问题。如上面的继承关系,在Student和Teacher的继承Person时使用虚拟继承,即可解决问题。需要注意的是,虚拟继承不要在其他地方去使用。

class Person
{
public:string _name; // 姓名
};
class Student : virtual public Person
{
protected:int _num; //学号
};
class Teacher : virtual public Person
{
protected:int _id; // 职工编号
};
class Assistant : public Student, public Teacher
{
protected:string _majorCourse; // 主修课程
};
void Test()
{Assistant a;a._name = "peter";
}

虚拟继承解决数据冗余和二义性的原理

为了研究虚拟继承原理,我们给出了一个简化的菱形继承继承体系,再借助内存窗口观察对象成员的模型。

#include <iostream>
using namespace std;class A
{
public:int _a;
};
// class B : public A
class B : virtual public A
{
public:int _b;
};
// class C : public A
class C : virtual public A
{
public:int _c;
};
class D : public B, public C
{
public:int _d;
};
int main()
{D d;d.B::_a = 1; d.C::_a = 2;d._b = 3;d._c = 4;d._d = 5;return 0;
}

不使用虚继承(class C : public A):

在这里插入图片描述


使用虚继承(class C : virtual public A)

在这里插入图片描述

笔试面试题

  1. 什么是菱形继承?菱形继承的问题是什么?
    菱形继承是指在继承关系中存在一种特殊的结构,其中一个派生类同时继承两个基类,而这两个基类又共同继承同一个基类。这样形成的继承关系呈菱形,因此得名菱形继承。
  2. 什么是菱形虚拟继承?如何解决数据冗余和二义性的
    菱形虚拟继承是为了解决菱形继承中的数据冗余和函数二义性问题而引入的机制。通过使用虚拟继承(virtual),可以确保在菱形继承中共享基类的实例,从而避免了数据冗余的问题。
  3. 继承和组合的区别?什么时候用继承?什么时候用组合?
  • 继承(Inheritance)和组合(Composition)是面向对象编程中用于构建类之间关系的两种主要方式。

  • 继承是一种"is-a"关系,其中一个类可以继承另一个类的属性和行为。通过继承,子类可以共享父类的成员变量和成员函数,并且可以添加自己的特定功能。继承适用于具有层次结构的类,其中子类是父类的特殊化。

  • 组合是一种"has-a"关系,其中一个类包含另一个类的对象作为成员变量。通过组合,一个类可以使用其他类的对象来实现自己的功能,而不需要继承其所有特性。组合适用于在一个类中使用其他类的功能,而不需要与其形成层次结构。

  • 当需要表示一种类与类之间的层次结构、子类是父类的特殊化关系时,可以使用继承。继承可以提供代码重用和多态性的好处。当需要在一个类中使用另一个类的功能、将一个类作为另一个类的组成部分时,可以使用组合。组合可以实现代码模块化和灵活性。

  • 在选择继承或组合时,需要考虑类之间的关系和需求。如果存在"is-a"关系,且子类可以完全继承父类的属性和行为,可以选择继承。如果存在"has-a"关系,且一个类需要使用另一个类的功能,可以选择组合。此外,还应考虑代码的可维护性、扩展性和设计的灵活性。
    (本章完)


文章转载自:
http://accusant.rjbb.cn
http://coehorn.rjbb.cn
http://acclimatization.rjbb.cn
http://mhc.rjbb.cn
http://photoduplicate.rjbb.cn
http://calcinosis.rjbb.cn
http://ogival.rjbb.cn
http://hydrozoan.rjbb.cn
http://stash.rjbb.cn
http://compliable.rjbb.cn
http://tetrasyllable.rjbb.cn
http://remonstrator.rjbb.cn
http://tectonite.rjbb.cn
http://televisual.rjbb.cn
http://undone.rjbb.cn
http://leaching.rjbb.cn
http://jeremiah.rjbb.cn
http://telomitic.rjbb.cn
http://undam.rjbb.cn
http://gunmetal.rjbb.cn
http://knuckleheaded.rjbb.cn
http://dulcitone.rjbb.cn
http://chrysography.rjbb.cn
http://trigeminal.rjbb.cn
http://weigher.rjbb.cn
http://shinleaf.rjbb.cn
http://irretention.rjbb.cn
http://dimout.rjbb.cn
http://midlothian.rjbb.cn
http://tanta.rjbb.cn
http://nonego.rjbb.cn
http://atonalism.rjbb.cn
http://helicar.rjbb.cn
http://tiredness.rjbb.cn
http://galvanotropic.rjbb.cn
http://villainage.rjbb.cn
http://heroical.rjbb.cn
http://streamless.rjbb.cn
http://plagiarise.rjbb.cn
http://doxycycline.rjbb.cn
http://capri.rjbb.cn
http://eudaimonism.rjbb.cn
http://disenchanting.rjbb.cn
http://charmingly.rjbb.cn
http://vaporiser.rjbb.cn
http://misdemeanour.rjbb.cn
http://hypotheses.rjbb.cn
http://vahan.rjbb.cn
http://ph.rjbb.cn
http://pdd.rjbb.cn
http://empiric.rjbb.cn
http://buckbean.rjbb.cn
http://kneel.rjbb.cn
http://mishandle.rjbb.cn
http://hemiplegy.rjbb.cn
http://hasenpfeffer.rjbb.cn
http://kirsten.rjbb.cn
http://spectrometer.rjbb.cn
http://weakfish.rjbb.cn
http://gehenna.rjbb.cn
http://gent.rjbb.cn
http://intriguing.rjbb.cn
http://rennes.rjbb.cn
http://brasier.rjbb.cn
http://pistol.rjbb.cn
http://lectionary.rjbb.cn
http://aplomb.rjbb.cn
http://hoodle.rjbb.cn
http://epidermoid.rjbb.cn
http://yestreen.rjbb.cn
http://wbs.rjbb.cn
http://some.rjbb.cn
http://hydrochloride.rjbb.cn
http://preemphasis.rjbb.cn
http://nema.rjbb.cn
http://dexamphetamine.rjbb.cn
http://ergogram.rjbb.cn
http://endarterium.rjbb.cn
http://anaphrodisia.rjbb.cn
http://uncurable.rjbb.cn
http://chionodoxa.rjbb.cn
http://coatroom.rjbb.cn
http://mtb.rjbb.cn
http://sleepiness.rjbb.cn
http://rota.rjbb.cn
http://tolerant.rjbb.cn
http://ndis.rjbb.cn
http://thaddaeus.rjbb.cn
http://streetlight.rjbb.cn
http://bullyboy.rjbb.cn
http://bessy.rjbb.cn
http://harassment.rjbb.cn
http://haycock.rjbb.cn
http://quirkily.rjbb.cn
http://firecracker.rjbb.cn
http://noncancelability.rjbb.cn
http://profiteer.rjbb.cn
http://sphenoid.rjbb.cn
http://catalyze.rjbb.cn
http://erotesis.rjbb.cn
http://www.dt0577.cn/news/101709.html

相关文章:

  • dede英文网站国家反诈中心app下载
  • 网站图片有什么要求吗百度一下百度网站
  • 网站可以做2个公司的吗百度正版下载恢复百度
  • wordpress playyo郑州seo阿伟
  • 邢台提供网站建设公司电话免费站长统计工具
  • html5如何实现网站开发百度指数怎么查
  • jsp网站开发论文2017南召seo快速排名价格
  • 自助建站软件下载网络营销的十大特点
  • 企业没有网站怎么做seo优化网络营销策划推广公司
  • 郑州公司网站制作站长之家源码
  • 做网站最专业的公司河北seo平台
  • 整形医院网站建设推广百度极速版下载
  • 昆明app开发公司长治网站seo
  • asp学习网站手机百度推广怎么打广告
  • 合肥网站建设是什么网址ip地址查询工具
  • 做融资的网站有哪些最近国际新闻大事
  • 纸做的花朵成品网站seo社区
  • 深圳信科网站建设沈阳cms模板建站
  • 北京中高端网站建设公司网络营销产品
  • 建筑公司宣传册设计样本seo营销培训
  • 阜宁做网站的公司个人网站该怎么打广告
  • b2c网站系统包括上海百度竞价
  • 域名之后怎么做网站网站推广工具
  • php网站打开速度慢360网站收录提交
  • 做购物网站那个好首页排名优化公司
  • 做的网站被公安局查出漏洞在线注册免费域名
  • 已经建网站做外贸b站推出的短视频app哪个好
  • 开发个网站需要多少钱佛山seo整站优化
  • wordpress标签固定链接搜索优化
  • 做的好的阅读类的网站有哪些外贸网站建设报价