标签:
在学习C++的时候,菱形继承问题绝对是一个不可避免的重点问题,那么什么是菱形继承问题呢?下图就是,长得像不像钻石?我画图确实很难看
因为C++允许多继承,当继承关系像上图这样子的时候,就会出现这样子的情况
A类是基类,B里面有个A我表示为B(A),C里面有个A我表示为C(A)
那么D里面有B和C我表示为D(B(A)C(A))
当我们想去使用D里面的A的时候,或者说访问A的部分值,在说白了究竟哪个A才是属于D的,D中的A究竟是B的A还是C的A?
1 class A 2 {}; 3 class B :public A 4 {}; 5 class C :public A 6 {}; 7 class D :public B, public C 8 {};
这么写可就错了,有的编译器甚至都不让你通过,直接给你报错
这很令人尴尬不是么,就算编译期让你通过了,也不要试图这样去通过D的对象访问其内部的A对象,这会让编译器很纠结
但是很简单给个vitual就好了
1 class A 2 {}; 3 class B :virtual public A 4 {}; 5 class C :virtual public A 6 {}; 7 class D : public B, public C 8 {};
他有了一个属于自己的A,调用A中的变量或者函数的时候就会去属于自己的A中调用,就不会让编译期纠结了
标签:
原文地址:http://www.cnblogs.com/lenomirei/p/5490714.html