关于虚继承(在钻石继承体系中,一定要用虚继承!)
来源:互联网 发布:手机能不能做淘宝抠图 编辑:程序博客网 时间:2024/04/28 03:13
在钻石继承体系中,一定要用虚继承!
1.下面的代码块儿无法通过编译,原因是,A3无法确定自己到底是用哪一个父类中的函数。
class A{public:virtual void f(){}virtual void g(){}};class A1 : virtual public A{public:virtual void f(){}};class A2: virtual public A{public:virtual void f(){}};class A3 : public A1, public A2{};
下面这个通过了编译。原因是,A3确定了自己的实现方式。
class A{public:virtual void f(){}virtual void g(){}};class A1 : virtual public A{public:virtual void f(){}};class A2: virtual public A{public:virtual void f(){}};class A3 : public A1, public A2{public:virtual void f(){}};
下面的代码中,A3仍然无法确定自己的实现方式。但是可以定义A3的对象。这是因为每一个函数只有一个虚函数表。
class A{public:virtual void f(){}virtual void g(){}};class A1: public A{};class A2: public A{};class A3: public A1, public A2{};
同理,下面的代码也能通过编译:
class A{public:virtual void f(){}virtual void g(){}};class A1: public A //不需要虚继承{public:virtual void f(){}};class A2: public A //不需要虚继承{public:virtual void g(){}};class A3: public A1, public A2{};
同理,下面的代码也能通过编译:
class A{ public:virtual void f(){} };class A1: public A{};class A2: public A{};class A3: public A1, public A2{};
但是。这三种方式存在一个致命的弱点,就是,如果不用虚继承。下面的代码无法通过编译:
A3 a3; A& a = a3;
用虚继承:则可通过
class A{public:virtual void f(){}virtual void g(){}};class A1: virtual public A{public:virtual void f(){}};class A2: virtual public A{public:virtual void g(){}};class A3: public A1, public A2{};
A3 a3; A& a = a3;虚继承的含义是,不一定会为孙子类提供实现。为孙子类提供实现的有可能是自己,也有可能是兄弟,也有可能是父类。在钻石继承体系中,一定要用虚继承来避免在钻石体系中的二义性
阅读全文
0 0
- 关于虚继承(在钻石继承体系中,一定要用虚继承!)
- 钻石继承与虚继承
- 钻石继承与虚继承
- 钻石继承和虚继承
- 钻石继承与虚继承
- 多重继承、钻石继承和虚继承
- 多重继承,钻石继承和虚继承
- C++ 钻石继承与虚继承
- C++钻石继承与虚继承
- 钻石问题(菱形继承问题) 和虚继承
- C++继承之钻石继承和虚继承
- 继承(单继承、多继承、菱形继承、虚继承)
- c++钻石-菱形继承
- 钻石继承和虚基类
- java(继承体系)
- 继承体系
- 继承体系
- 关于虚继承
- Hibernate(九)HQL查询二
- 非阻塞模式与阻塞模式
- TED:生命的每一步
- 百炼-2817-木棒-C语言-递归
- Java设计模式:简单工厂模式(Simple Factory Pattern)
- 关于虚继承(在钻石继承体系中,一定要用虚继承!)
- 现在的UX设计师必须要懂代码才能做好原型?
- c++ 内存的例子
- 微信小程序开发-电影影评小程序
- 爬虫第一课(访问网站的原理和区别)
- windows的阻塞和非阻塞Socket编程
- Intellij Idea2016.3 svn服务器拉取代码
- HDU6070 [2017duoxiaolianhe4] Dirt Ratio xianduanshu + erfen
- JavaScript思维导图