Inheritance 多类继承蕴涵

Inheritance 多类继承蕴涵,inheritance,Inheritance,我知道钻石问题是当两个类B和C继承自A,而类D继承自B和C时产生的歧义。如果A中有一个方法B和C已经重写,而D没有重写,那么D继承的是哪个版本的方法:B的,还是C的 但是为什么我们需要这个长度解释,我们可以说B和C有一个相同的方法,D继承了B和C,在D中没有这样的方法,所以当我们创建D的实例并调用该方法时,编译器不知道D继承了哪个版本的方法。因此,我们可以避免提及A类问题,将菱形问题转化为“三角形问题”为什么将其标记为c?我不完全确定你的意思,但我想你是说你希望编译器拒绝d->foo(),因为B

我知道钻石问题是当两个类B和C继承自A,而类D继承自B和C时产生的歧义。如果A中有一个方法B和C已经重写,而D没有重写,那么D继承的是哪个版本的方法:B的,还是C的


但是为什么我们需要这个长度解释,我们可以说B和C有一个相同的方法,D继承了B和C,在D中没有这样的方法,所以当我们创建D的实例并调用该方法时,编译器不知道D继承了哪个版本的方法。因此,我们可以避免提及A类问题,将菱形问题转化为“三角形问题”

为什么将其标记为c?我不完全确定你的意思,但我想你是说你希望编译器拒绝
d->foo()
,因为
B::foo()
c::foo()
之间存在歧义,并且(在某些语言中)事实就是这样。(请注意,菱形“问题”通常是关于
D
是否应包含
A
数据的多个副本,而不是方法分辨率。)