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

qq建设网站制作网站模板

qq建设网站,制作网站模板,电视直播网站开发,制作安卓app的软件目录 一,菱形继承 1.1单继承 1.2多继承 1.3菱形继承 1.4菱形继承的问题 1.5虚拟继承解决数据冗余和二义性的原理 二.继承的总结和反思 一,菱形继承 C三大特性——继承-CSDN博客 1.1单继承 单继承:一个子类只有一个直接父类时称这个继…

目录

一,菱形继承

1.1单继承

1.2多继承

1.3菱形继承

1.4菱形继承的问题

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

二.继承的总结和反思


一,菱形继承

C++三大特性——继承-CSDN博客

1.1单继承

单继承:一个子类只有一个直接父类时称这个继承关系为单继承

1.2多继承

多继承:一个子类有两个或以上直接父类时称这个继承关系为多继承

1.3菱形继承

菱形继承:菱形继承是多继承的一种特殊情况

1.4菱形继承的问题

菱形继承的问题:从下面的对象成员模型构造,可以看出菱形继承有数据冗余和二义性的问题。在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";  错误// 需要显示指定访问哪个父类的成员可以解决二义性问题,但是数据冗余问题无法解决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";
}

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

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

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;
}

下图是菱形继承的内存对象成员模型:这里可以看到数据冗余

下图是菱形虚拟继承的内存对象成员模型:这里可以分析出D对象中将A放到的了对象组成的最下面,这个A同时属于B和C,那么B和C如何去找到公共的A呢?这里是通过了B和C的两个指针,指向的一张表。这两个指针叫虚基表指针,这两个表叫虚基表。虚基表中存的偏移量。通过偏移量可以找到下面的A

// 有人可能会有疑问为什么D中B和C部分要去找属于自己的A?那么大家看看当下面的赋值发生时,d是不是
要去找出B/C成员中的A才能赋值过去?
D d;
B b = d;
C c = d;

下面是上面的Person关系菱形虚拟继承的原理解释:

二.继承的总结和反思

1. 很多人说C++语法复杂,其实多继承就是一个体现。有了多继承,就存在菱形继承,有了菱形继承就有菱形虚拟继承,底层实现就很复杂。所以一般不建议设计出多继承,一定不要设计出菱形继承。否则在复杂度及性能上都有问题。


2. 多继承可以认为是C++的缺陷之一,很多后来的语言都没有多继承,如Java

http://www.fp688.cn/news/142624.html

相关文章:

  • 昆明响应式网站制作如何优化网络
  • 17做网站今天的国内新闻
  • 嘉兴网嘉兴网站建设搭建一个网站需要多少钱
  • 优质校建设网站网络营销的优化和推广方式
  • 网站导航栏隐藏部分怎么做百度推广外包
  • css怎么做响应式网站网上推广平台
  • 长沙 做网站大连百度关键词优化
  • 网站建设营销怎么做电商网站大全
  • 启航做网站怎么样培训机构哪家好
  • 常州网站建设团队中国体育新闻
  • 网盘搜索 网站开发竞价托管外包哪家好
  • 邢台商城类网站建设steam交易链接在哪复制
  • 免费空间禁止做网络验证网站优化seo怎么做
  • 网站的服务器打不开十大永久免费的软件下载
  • 磁县邯郸网站建设北京seo代理计费
  • wordpress前台浏览量插件seo优化需要做什么
  • 接游戏单子代打的平台东莞seo计费管理
  • 广东建设信息网是什么网站亚马逊提升关键词排名的方法
  • 可以做本地生活服务的有哪些网站网络软文营销的案例
  • 浙江建设网站是多少百度一下首页登录
  • 国家企业信用信息公示系统网址关键词seo是什么意思
  • 青海教育厅门户网站优化大师手机版下载安装app
  • 专业网站策划网站seo推广seo教程
  • 哈尔滨网站建设费用sem搜索引擎
  • 最优惠的建设网站建设关键字搜索
  • 深圳网站设计公司费用大概多少湖南手机版建站系统开发
  • 企业公司网站建设济南头条新闻热点
  • 做电商的网站b站大全永不收费2023入口在哪
  • 新闻稿件网站优化资源
  • 建设网站目的及功能定位网站没有友情链接