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

广州市住房和城乡建设局官方网站手机怎么安装 wordpress

广州市住房和城乡建设局官方网站,手机怎么安装 wordpress,自己怎么做免费网站空间,做淘宝网店需要多少钱在C中#xff0c;虚继承#xff08;Virtual Inheritance#xff09;是一种特殊的继承方式#xff0c;用于解决菱形继承#xff08;Diamond Inheritance#xff09;问题。菱形继承指的是一个类同时继承自两个或更多个具有共同基类的类#xff0c;从而导致了多个实例同一个…在C中虚继承Virtual Inheritance是一种特殊的继承方式用于解决菱形继承Diamond Inheritance问题。菱形继承指的是一个类同时继承自两个或更多个具有共同基类的类从而导致了多个实例同一个基类的实例的冗余。 多继承-菱形继承 现在来思考以下经典的菱形继承问题 Animal/ \cat bear\ /panda 在这个继承结构中类 Animal 是基类类 cat 和 bear 都直接继承自 Animal而类 panda 继承自 cat 和 bear。当使用传统的继承方式时panda 类将会继承两份 Animal 类的实例这会导致冗余。 以下代码就是典型的菱形继承的例子 class Animal { public:Animal();~Animal();int m_nAge; }; ​ ​ class Cat : public Animal { public:Cat();~Cat(); }; ​ class bear:public Animal { public:bear();~bear(); }; ​ class Panda:public Cat,public bear { public:Panda();~Panda(); }; Animal 类Animal 类是一个基类具有一个 m_nAge 成员变量用于表示动物的年龄。 Cat 类和 bear 类Cat 类和 bear 类分别是 Animal 类的公有派生类。它们继承了 Animal 类的成员变量和方法。 Panda 类Panda 类同时公有派生自 Cat 类和 bear 类从而继承了这两个类的成员。由于 Cat 类和 bear 类都是从 Animal 类继承而来的因此 Panda 类实际上包含了两份 Animal 类的成员变量 m_nAge这导致冗余数据。 在构造函数中设置标志创建panda对象后得到的结果创建一个Panda对象Animal构造了两次。 此时我在主程序中进行panda对象的创建,并尝试对panda继承下来的的m_nAge对象进行赋值 此时程序报错并提示Panda的m_nAge成员不明确原因其实就是因为Panda 继承自Cat和bear两个类那么就意味着Panda类继承了两份 Animal 类的成员变量 m_nAge此时使用panda-m_nAge 10;对Panda的变量进行赋值编译器就会混淆如果不想程序爆红就在赋值时就必须成员变量的继承来源 int main() {Panda * panda new Panda;//成员变量的赋值panda-Cat::m_nAge 10;panda-bear::m_nAge 15; ​std::cout Panda Age: panda-Cat::m_nAge Panda AgeB: panda-bear::m_nAge std::endl;delete panda;system(pause);return 0; } panda-Cat::m_nAge 10;给 panda 对象中 Cat 类的成员变量 m_nAge 赋值为 10。 panda-bear::m_nAge 15;给 panda 对象中 bear 类的成员变量 m_nAge 赋值为 15。 就算解决了程序不报错的问题其实菱形继承多继承时还会出现其他问题 1.数据冗余每个派生类实例都会包含基类实例的副本这可能会导致内存空间的浪费特别是在多重继承的情况下可能会存在多份相同的基类数据。 2.数据一致性如果多个派生类实例共享同一个基类实例那么当修改其中一个派生类实例中的基类数据时会影响到其他共享同一基类实例的派生类实例这可能会导致数据不一致的问题。 3.维护困难当多个派生类实例共享同一个基类实例时可能会增加代码的复杂性和维护成本因为需要确保在任何修改基类数据的地方都能正确地处理多个派生类实例。 4.生命周期问题如果派生类实例在不同的时间点创建和销毁而共享的基类实例在某个派生类实例被销毁后还继续存在这可能会导致悬挂指针或内存泄漏等问题 这个时候就可以使用虚继承对以上问题进行统一解决 虚继承 虚继承通过使用关键字 virtual 来解决这个问题。当一个类以虚继承方式继承自一个基类时无论该类被多次继承其基类的实例只会在继承层次结构中的最顶层被创建一次。这意味着对于上面的菱形继承问题使用虚继承后D 类将只继承一份 A 类的实例。 回到上述例子 class Animal { public:Animal();~Animal(); ​int m_nAge; } ​ //使用虚继承 class Cat : public virtual Animal { public:Cat();~Cat(); }; ​ //使用虚继承 class bear:public virtual Animal { public:bear();~bear(); ​ }; ​ class Panda:public Cat,public bear { public:Panda();~Panda(); ​ }; Cat 类和 bear 类这两个类都使用了虚继承即使用 virtual 关键字来继承自 Animal 类。这意味着无论 Cat 类和 bear 类被多次继承Animal 类的实例都只会在继承层次结构中的最顶层被创建一次。这样可以避免在 Panda 类中出现多个 Animal 类的实例从而解决了菱形继承问题。 Panda 类Panda 类同时公有派生自 Cat 类和 bear 类从而继承了这两个类的成员。因为 Cat 类和 bear 类都是虚继承自 Animal 类的所以 Panda 类中只包含了一个 Animal 类的实例从而避免了多个实例共享同一个基类实例的冗余问题。 这就意味着此时我们在主函数中创建panda对象并对对象的m_nAge成员进行赋值/访问 int main() {Panda * panda new Panda;panda-m_nAge 10;std::cout Panda Age: panda-m_nAge std::endl;delete panda; } 运行结果 Panda Age:10 panda对象中的m_nAge成员变量就只有一个副本这个时候就对对象中的成员进行访问时就无需再指定继承路径了。
http://www.w-s-a.com/news/326816/

相关文章:

  • 佛山搭建建网站哪家好微信如何建立自己的公众号
  • 联想公司网站建设现状广州建网站兴田德润团队
  • 网站开发的技术有网页设计实训报告工作内容和步骤
  • 视频做网站长沙网站制作平台
  • js网站建设北京seo公司优化网络可见性
  • 付款网站源码建网站卖东西
  • 用php做的录入成绩的网站wordpress等级插件
  • 网站运营优化方案广西桂林公司
  • 快递网站策划怎么做ppt长春建设信息网站
  • 做服装搭配图的网站有哪些经营一个网站要怎么做
  • 呼市品牌网站建设那家好增城住房和建设局网站
  • 网站首页布局设计代码太仓网站开发建设服务
  • 学校网站建设与管理porto wordpress模板
  • 余姚做网站公司网站建设有哪些基本流程
  • 门户网站建设的报价百度医生在线问诊
  • 北京公司注册在哪个网站浏览器打开网址404
  • 廊坊做网站公司绣花图案设计网站
  • 网站空间租用哪个好购物网站建设模板图片
  • 建设银行包头分行网站泰安网签成交量最新
  • 手机微网站与微官网现在去成都需要隔离吗
  • 学校的二级网站怎么建设深圳企业网站制作设计
  • 自己做qq头像静态的网站网站建设是属于软件开发费吗
  • 举报网站建设做网站之前的工作
  • 用QQ群做网站排名个人网站制作协议
  • 做茶叶网站的素材天津网站营销
  • 网站设计建设流程图微信端的网站开发python
  • 湖州网站seo优化网站改域名备案
  • dedecms怎么制作网站合肥电商网站开发
  • 网站开发通用流程图做flash的网站
  • 营销型网站有哪些平台网站建设藤设计