使用动态转换无法理解的事情发生了。一旦我用仅属于A的B调用了一个虚拟方法,我就会遇到编译错误,并且我理解为什么。我不明白的是为什么当我将B分配给A时没有得到编译错误。因此,基本上发生的事情是定义的指针,在B中找不到它时选择使用A方法,而在B中找到它时选择使用B方法。我要求对此现象进行解释。
class A {
public:
virtual void MethodA (int);
virtual void MethodA (int, int);
};
void A::MethodA (int i)
{ std::cout << "ONE!!\n"; }
void A::MethodA (int i, int j)
{ std::cout << "TWO!!\n"; }
class B: public A{
public:
void MethodA (int);
};
void B::MethodA (int i)
{ std::cout << "THREE!!\n"; }
int main ()
{
A* ptrA=new B;
B b;
b.MethodA (1);
ptrA->MethodA (1);
ptrA->MethodA (1, 1); //doesnt gives compilation
error
// b.MethodA(1,1); gives compilation error
}