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

白名单网站有哪些网站备案号代码

白名单网站有哪些,网站备案号代码,vip 支付wordpress,建站网站那个好虚继承的基本概念 在 C 中#xff0c;虚继承主要用于解决多继承时可能出现的菱形继承问题。菱形继承是指一个类有两个#xff08;或更多#xff09;子类#xff0c;而这两个子类又同时继承自一个共同的基类#xff0c;当这些子类又被另一个类继承时#xff0c;就形成了菱… 虚继承的基本概念 在 C 中虚继承主要用于解决多继承时可能出现的菱形继承问题。菱形继承是指一个类有两个或更多子类而这两个子类又同时继承自一个共同的基类当这些子类又被另一个类继承时就形成了菱形结构。在这种情况下如果没有虚继承会导致基类数据成员在派生类中有多份副本可能引起二义性等问题。虚继承可以保证在这种复杂的继承关系中公共基类只有一份副本。 简单的虚继承示例 首先看一个没有虚继承导致数据成员重复的例子cpp class Base { public:int baseData; };class Derived1 : public Base { };class Derived2 : public Base { };class GrandDerived : public Derived1, public Derived2 { };int main() {GrandDerived gd;// 下面这行代码会产生二义性错误因为baseData在Derived1和Derived2中都存在// gd.baseData 10;return 0; }在这个例子中GrandDerived类通过Derived1和Derived2间接继承了Base类这就导致GrandDerived对象中有两份Base类的数据成员baseData。当试图访问baseData时会产生二义性错误。 使用虚继承解决菱形继承问题 下面是使用虚继承来解决上述问题的代码cpp class Base { public:int baseData; };class Derived1 : virtual public Base { };class Derived2 : virtual public Base { };class GrandDerived : public Derived1, public Derived2 { };int main() {GrandDerived gd;gd.baseData 10; // 正确此时只有一份baseDatareturn 0; }在这个修改后的代码中Derived1和Derived2虚继承自Base类。这使得在GrandDerived类中Base类只会有一份副本所以可以正确地访问baseData成员。 虚继承的构造函数顺序案例 当涉及虚继承时构造函数的调用顺序也有特殊的规则。构造函数的调用顺序是先调用虚基类的构造函数然后再按照继承顺序调用非虚基类的构造函数。cpp class Base { public:Base() {std::cout Base constructor std::endl;} };class Derived1 : virtual public Base { public:Derived1() {std::cout Derived1 constructor std::endl;} };class Derived2 : virtual public Base { public:Derived2() {std::cout Derived2 constructor std::endl;} };class GrandDerived : public Derived1, public Derived2 { public:GrandDerived() {std::cout GrandDerived constructor std::endl;} };int main() {GrandDerived gd;return 0; }在这个例子中输出结果是 Base constructor Derived1 constructor Derived2 constructor GrandDerived constructor可以看到首先调用了虚基类Base的构造函数然后按照继承顺序调用了Derived1和Derived2的构造函数最后调用了GrandDerived的构造函数。 虚继承中的指针和引用案例 考虑以下代码来展示虚继承中指针和引用的行为cpp class Base { public:int baseData;virtual void print() {std::cout Base print std::endl;} };class Derived1 : virtual public Base { public:void print() override {std::cout Derived1 print std::endl;} };class Derived2 : virtual public Base { public:void print() override {std::cout Derived2 print std::endl;} };class GrandDerived : public Derived1, public Derived2 { };int main() {GrandDerived gd;Base* ptr gd;ptr-print(); // 调用Derived1的print函数这取决于继承顺序和虚函数机制return 0; }在这个例子中通过Base*指针指向GrandDerived对象当调用print函数时由于虚函数的动态绑定特性和继承顺序实际上调用的是Derived1类中的print函数。这展示了在虚继承场景下通过基类指针或引用访问虚函数时的多态行为。 以下是用流程图来说明虚继承用于解决多继承时菱形继承问题的过程 graph TD;A[定义基类Base] -- B[定义子类Derived1和Derived2直接继承Base];B -- C[定义GrandDerived类继承Derived1和Derived2形成菱形继承结构];C -- D[不使用虚继承时GrandDerived对象中有两份Base类的数据成员访问可能出现二义性];A -- E[定义子类Derived1和Derived2虚继承Base];E -- F[定义GrandDerived类继承Derived1和Derived2];F -- G[使用虚继承后Base类在GrandDerived对象中只有一份副本可正常访问数据成员];在上述流程图中 首先是定义一个基类Base。然后有两种情况分支 一种是常规的非虚继承方式Derived1和Derived2直接继承Base之后GrandDerived再继承Derived1和Derived2这样会形成菱形继承结构并且在不使用虚继承时GrandDerived对象中会存在两份Base类的数据成员导致在访问这些数据成员时可能出现二义性问题。另一种是采用虚继承的方式Derived1和Derived2虚继承Base接着GrandDerived继承Derived1和Derived2此时由于虚继承的作用Base类在GrandDerived对象中只会有一份副本从而可以正常地访问数据成员避免了二义性等问题。
http://www.w-s-a.com/news/178597/

相关文章:

  • 情公司做的网站seo与网站优化 pdf
  • 做一个购物网站多少钱江阴市住房和城乡建设局网站
  • 网站建设都包括哪些ps怎么做网站首页和超链接
  • 怎样低成本做网站推广编辑网站教程
  • 邯郸网站建设信息网站开发报价人天
  • 王店镇建设中心小学网站酷玛网站建设
  • 网站需求方案wordpress博客主题推荐
  • 网站安全证书过期怎么办那个视频网站最好最全网址
  • 外贸上哪个网站开发客户建行个人网上银行登录入口
  • 空间除了可以做网站还能干什么qq钓鱼网站
  • 网站 技术企业网站用免费程序
  • 做网站的中文名字汕尾网站开发
  • 网站推广效果推广网站推荐
  • 腾讯企业网站建设网络推广比较经典和常用的方法有
  • 四川成都网站网页设计上海外贸网站制作公司
  • wordpress模板首页图片锦州网站做优化
  • 哔哩哔哩网站建设分析有哪些做网站好的公司
  • 福建建设执业中心网站沧州网络推广外包公司
  • 做网站怎么改关键词营销网站建设818gx
  • 广撒网网站怎么进行网络营销
  • 中职计算机网站建设教学计划电商网站如何避免客户信息泄露
  • 惠州微网站建设外贸进出口代理公司
  • 网站建设最常见的问题建设银行网站机构
  • 网站集群建设相关的招标南通seo网站建设费用
  • 网络培训的网站建设能够做二维码网站
  • 网站类游戏网站开发wordpress 文章首标点
  • 徐州网站建设熊掌号免费推广网站入口2020
  • 网站建设有前途长春高铁站
  • 做网站网课阿里云域名查询系统
  • saas建站平台有哪些简述网站建设基本流程答案