我有以下代码示例:
class A
{
public:
A(int a):AA(a) {};
int AA;
virtual int Test()
{
return AA;
};
};
class B
{
public:
B(int b):BB(b) {};
int BB;
virtual int Test()
{
return BB;
};
};
class C:public A, public B
{
public:
C(int a, int b, int c) :A(a),B(b),CC(c) {};
int CC;
};
int main()
{
A *a = new C(1,2,3);
B *b = new C(1,2,3);
C *c = new C(1,2,3);
int x = a->Test() ; // this is 1
int y = b->Test() ; // this is 2
// int z = c->Test() ; // this does not compile
return 0;
}
我期望对 a->Test() 和 b->Test() 的调用也是模棱两可的,因为对象 a 是 C,因此从 A 和 B 继承,它们都具有相同的 Test() 函数。但是,它们都调用对应于 delcared 类型的实现,而不是对象实际的类型。
谁能解释为什么这些电话不模棱两可?C++ 总是这样吗?