码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-05-13 20:23:08      阅读:207      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!