类型Base的指针指向派生类并使用Base的方法

时间:2019-03-07 14:42:26

标签: c++ inheritance polymorphism dynamic-cast

使用动态转换无法理解的事情发生了。一旦我用仅属于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
}

0 个答案:

没有答案