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

vue.js网站如果做自适应wordpress赞助插件

vue.js网站如果做自适应,wordpress赞助插件,如何制作网页电子新年贺卡步骤,百度推广开户代理一.什么是菱形继承 菱形继承是多继承的一种特殊情况&#xff0c;一个类有多个父类&#xff0c;这些父类又有相同的父类或者祖先类&#xff0c;那么该类就会有多份重复的成员&#xff0c;从而造成调用二义性和数据冗余。 class Person {public:Person(){cout << "P…

一.什么是菱形继承

菱形继承是多继承的一种特殊情况,一个类有多个父类,这些父类又有相同的父类或者祖先类,那么该类就会有多份重复的成员,从而造成调用二义性和数据冗余。

class Person
{public:Person(){cout << "Person构造" << endl;}
public:int _name = 0;int _age = 0;
};class Student :  public Person
{public:Student(){cout << "Student构造" << endl;}int _stuid = 0;
};class Teacher :  public Person
{
public:Teacher(){cout << "Teacher构造" << endl;}int _jobid = 0;
};class Assistant : public Student, public Teacher
{
public:Assistant(){cout << "Assistant构造" << endl;}int _task = 0;
};
int main()
{Assistant a;//a._name;//二义性:访问Student的_name还是Teacher的_name呢?//需要指定类域访问a.Student::_name = 1;a.Student::_age = 2;a._stuid = 3;a.Teacher::_name = 4;a.Teacher::_age = 5;a._jobid = 6;a._task = 7;return 0;
}

从a的内存布局可以看到,a中有两份_name和_age,它们是从Student和Teacher类继承下来的。二义性的问题可以通过指定类域访问解决,但数据冗余的问题是无法规避的,必须引入新的技术——虚继承 

二.虚继承的用法

只需在继承那个祖先类时加上关键字virtual即可

class Person
{public:Person(){cout << "Person构造" << endl;}
public:int _name = 0;int _age = 0;
};class Student :  virtual public Person
{public:Student(){cout << "Student构造" << endl;}int _stuid = 0;
};class Teacher :  virtual public Person
{
public:Teacher(){cout << "Teacher构造" << endl;}int _jobid = 0;
};class Assistant : public Student, public Teacher
{
public:Assistant(){cout << "Assistant构造" << endl;}int _task = 0;
};
int main()
{Assistant a;a.Student::_name = 1;a.Student::_age = 2;a._stuid = 3;a.Teacher::_name = 4;a.Teacher::_age = 5;a._jobid = 6;a._task = 7;return 0;
}

虚继承前:

虚继承后: 

可以看到,Person构造函数只调用了一次。

 

再来看看虚继承后a的内存分布:

 虚继承后,重复的那部分成员被单独拎了出来,只有一份,此时就不存在二义性的问题了。a.Student::_name;a.Student::_name;a._name访问的是同一份数据。同时也解决了数据冗余的问题。 

三.虚继承的原理

Student和Teacher中多出的这两个东西是什么呢?这似乎是一个地址,那我们在内存中看一看(注意是小端存储,低字节存低位数据,高字节存高位数据,故地址应该为007e9b4c和007e9b54)

 

 

注意这是16进制,故第一个数 是20,第二个数是12。

在看看上面的内存分布,会发现:006ff8d0这个地址加上20,006ff8d8加上12,刚好是006ff8e4,也就是重复的Person那部分变量的起始地址。

Assistant对象中将Person放到的了对象组成的最下面,这个Person同时属于Student和Teacher,给Student和Teacher都添加一个指针,指向的一张表。这两个指针叫虚基表指针,这两个表叫虚基表。虚基表中存了偏移量,通过偏移量可以找到下面的Person。事实上,虚基表中存放了两个数据,第二个数是偏移量,第一个数与多态中的虚表有关,这里不作展开,后面的多态会讲到。

http://www.yayakq.cn/news/472019/

相关文章:

  • xuzhou网站制作网站的简单布局
  • 手机网站与微信结合网页制作软件都有哪些
  • 南通网站建设推广优化市场营销推广方案怎么做
  • 网站建设计划书怎么写深圳商场设计公司排名
  • 网站超链接怎么做 word文档建一个公司需要多少钱?
  • 网站建设公司果动何鹏seo
  • 网站标题怎么隔开网站别人做的收到方正侵权
  • 河北燕郊网站制作房地产市场低迷
  • 怎么样做外贸网站王烨萍
  • 自建设网站公司做网站那个网站好
  • 做政协网站的目的是什么项目合作网站
  • 旅游类网站设计模板下载不会代码建设网站
  • 建设内部网站目的iis7搭建网站
  • 建设一个电商网站需要多少钱做网站最低服务器配置
  • 郑州网站推广价格武清做网站
  • 一 网站开发背景外包网站设计公司
  • 网站建设设计张家界网站建设多少钱
  • 做网站的公司名称网站功能建设流程图
  • 网站设计图网页动态设计怎么做
  • 公司网站注意事项万素网
  • 朝阳住房和城乡建设厅网站上海 高端 网站建设
  • 关于课题网站建设的协议免费网址域名注册
  • 蓝色的包装材料企业网站模板哪些网站可以做店铺推广
  • 网站建设 上寻模板建筑设计人才招聘
  • 有需要做网站推广找我商务网站的建设步骤
  • 怎样用阿里云服务器做网站百度一下手机版首页
  • 湖北微网站建设费用搜索指数
  • 挖矿网站怎么做做建筑的网站
  • 网站列表功能湖南工程建设监理有限公司网站
  • 杭州seo网站建设网站建设要学会什么软件