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

国家电力安全网站两学一做企业电子商务网站平台建设

国家电力安全网站两学一做,企业电子商务网站平台建设,网站弹出,低代码网站开发平台菱形继承 虚继承 在c中,在使用多继承时如果发生类A排石出类B和类C,类D继承自类B和类C,这是就发生菱形继承。如果这时D调用A那编译器就发生了混乱,它不知道要用B中的A还是C中的A。 验证代码如下 //菱形继承 class A {protected:int…

菱形继承 虚继承

在c++中,在使用多继承时如果发生类A排石出类B和类C,类D继承自类B和类C,这是就发生菱形继承。

在这里插入图片描述

如果这时D调用A那编译器就发生了混乱,它不知道要用B中的A还是C中的A。

验证代码如下

//菱形继承
class A {protected:int m_a;
};
//直接基类B
class B : public A {protected:int m_B;
};
class C : public A {protected:int m_C;
};
class D : public B,public C {
public:void srtA(int A) {//错误的方式 m_a=A;//正确的方式——需要进行声明或者使用虚继承B::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;
};

很好虽然用进行声明的方式可以解决,但是又会出现另一个问题,就是数据冗余,为了解决菱形继承出现的数据冗余的问题C++提出了虚继承,虚继承使得派生类中只保留一份间接成员

需要用到 virtual

语法

class B:virtual public A{};

我们把之前的代码改一改发现果然解决了问题


//菱形继承
class A {protected:int m_a;
};
//直接基类B
class B : virtual public A {protected:int m_B;
};//这里改了
class C : virtual public A {protected:int m_C;
};//这里改了
class D : public B,public C {
public:void srtA(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;
}

虚继承构造函数

在序继承中,虚基类是由最终的派生类初始化的。

简单点说就是由最后一次子类初始化他才会改变。


#include <iostream>
#include <bits/ostream.tcc>
using namespace std;
//菱形继承
class A {protected:int m_a;
public:A(int a):m_a(a){}void print() {cout<<this->m_a<<endl;}
};
//直接基类B
class B : virtual public A {protected:int m_B;public:B(int a,int b):A(a),m_B(b){}void print() {cout<<this->m_a<<" "<<this->m_B<<endl;}
};
class C : virtual public A {protected:int m_C;
public:C(int a,int c):A(a),m_C(c){}void print() {cout<<this->m_a<<" "<<this->m_C<<endl;}
};
class D : public B,public C {
public:D(int a,int b,int c,int d):
A(a),B(90,b),C(100,c),m_D(d){}
//在这里虽然赋过90和100 但是这里赋值不作数void srtA(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;}void print() {cout<<this->m_a<<" "<<this->m_B<<" "<<this->m_C<<" "<<this->m_D<<endl;}private:
int m_D;};
int main() {A a1(111);a1.print();B b1(222 ,333);b1.print();C c1(444 ,555);c1.print();D d1(666,777,888,999);d1.print();return 0;
}

这篇博客到这里就结束了喜欢记得点赞哦(๑′ᴗ‵๑)I Lᵒᵛᵉᵧₒᵤ❤

http://www.dtcms.com/a/411671.html

相关文章:

  • 网站建设软件公司唯爱wordpress主题
  • 用 PyTorch 搞定 CIFAR10 数据集
  • VLMs距离空间智能还有多远的路要走?
  • 做网站北京德国网站建设
  • 网站建立安全连接失败软装设计公司加盟
  • 搭建个人博客:云服务器IP如何使用
  • iis网站asp.net部署网站建设运营费计入什么科目
  • 建设外贸营销型网站需要什么青岛网站设计定制
  • 券商 做网站圣都装饰的口碑怎么样
  • 【算法训练营Day26】动态规划part2
  • 河北衡水建设网站公司电话wordpress ajax登录插件
  • 网站源码怎么搭建最新新闻热点事件2023年10月
  • 城乡建设部网站广州市国外学校网站设计
  • 泊头网站建设公司wordpress删除主题之后
  • 一站式营销平台wordpress学校网站模板
  • LeetCode 算法题【简单】338. 比特位计数
  • 买房网站排名福州做网站建设公司
  • 爱思强交付第100套G10-SiC系统
  • 网站的建设要多少钱求推荐专门做借条的网站
  • 在线旅游攻略网站建设方案做网站要注册第35类商标吗
  • RocketMQ 核心知识整理:工作原理、常用命令与常见问题解决
  • 做养生网站怎么赚钱麻涌建设网站
  • 域名备案 没有网站网站建设意见建议表
  • Unity-Statemachinebehaviour状态机行为脚本
  • 网站问题图片房子网站有哪些
  • 孝感应城网站建设长春网站建设 找源晟
  • 如何设置网站服务器常州做网站哪家便宜
  • 单片机引脚的高电平和低电平范围值
  • 设计师可以做兼职的网站创建网站的基本步骤
  • 网站后台开发做什么凡科网网站建设