在定义继承A的类B和C时,我使用菱形继承在C++中编写了一段代码,而没有对最上面的A类使用关键字‘虚拟’,然后定义了从B和C继承的类D,因为类D不使用类A成员x,编译不会抛出任何错误。但是如果它这样做了(通过取消注释函数foo()),编译器就会抛出错误,其中提到歧义是可以理解的。class C:virtual public A};
现在,foo()中使用的x没有任何歧义,因为
我正在学习多重继承和菱形问题,当我从最派生的类进行函数调用时,Visual Studio告诉我该调用是不明确的:{ DObj.aFunction(); // This is an ambiguous call我知道如果我在B和C类中重写了基类函数,那么调用就会有歧义在继承中,可以继承成员变量的</em
如果声明继承层次结构,其中父类和子类都具有相同名称和参数的静态方法*,则Visual Studio将引发警告public class BaseClass public static为什么这个被认为是隐藏的方法呢?这两个方法都不涉及继承层次结构,只能通过使用类名来调用:SubClass.DoSomething();
或者,在类本身中不合格。在任何一种情况下,都不存在调用哪个方法的<