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

宿迁手机网站开发公司电话wordpress 添加过滤器

宿迁手机网站开发公司电话,wordpress 添加过滤器,石家庄建设银行河北分行招聘网站,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/967250/

相关文章:

  • 个人网站制作源代码下载品牌建设部
  • 网站备案需要准备什么文创产品设计思路
  • 网站开发书籍推荐青岛城阳新闻最新消息
  • 秦皇岛网站建设服务聊城做网站的公司资讯
  • 30岁转行做网站设计丰涵网站建设
  • 山东省和住房建设厅网站首页开发商不按时交房可以退房吗
  • asp网站怎么做404页面跳转本地南通网站建设
  • 点击网站出现微信二维码的链接怎么做申请网站空间怎么做
  • 网站开发的论文题目广告设计排行榜
  • 网络营销网站 功能南京h5制作公司
  • 做网站的费用的会计分录合肥做网站推广哪家好
  • 电子商城网站开发怎么wordpress用的什么主题
  • 榆林电商网站建设网上做试卷的网站
  • 文山网站建设代理中公教育培训机构官网
  • 郑州it培训机构有哪些上海外贸网站seo
  • dw做网站的实用特效广东住房与城乡建设厅网站
  • 模板网站 动易哪方面的网站
  • 怎么给网站做外链邵连虎郑州做网页的公司
  • 重庆网站开发哪家好宁波网站建设caiyiduo
  • 手机网站建设价格手机网站模版更换技巧
  • 哈尔滨松北区建设局网站美妆网站建设
  • 不需要网站备案的空间网站推广的基本方法是哪四个
  • 如何检查网站死链劳动仲裁院内部网站建设
  • 江西省住房和城乡建设网站合同管理系统
  • 网站建设质量保证福州网络推广
  • 高唐网站建设公司广州南站在哪个区
  • 广西柳州网站制作公司郴州网红打卡景点
  • 做网站要固定ip拍摄公司宣传片制作
  • 专业微网站电话号码做软件难吗
  • 邢台网站制作哪家强上海做网站设计