首页 > 其他 > 详细

菱形继承问题(钻石问题)

时间:2016-05-13 20:22:21      阅读:209      评论:0      收藏:0      [点我收藏+]

在学习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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!