我原以为很容易找到那个答案,但四处寻找却一无所获。
考虑以下:
#include <iostream>
class Base
{
public:
virtual void whoAmI()
{
std::cout << "\nI'm base\n" ;
}
};
class Derived : public Base
{
};
class SecondDerivative : public Derived
{
public:
virtual void whoAmI()
{
std::cout << "\nI'm Second derivative\n" ;
}
};
int main()
{
SecondDerivative SD;
Base* b = &SD;
b->whoAmI();
return 0;
}
我知道使用指针时应该调用运行时类型的虚函数。但是在这个例子中,直接派生类并没有实现虚函数,而是在使用原始基类指针时调用了其派生类的函数。
使用 g++ 构建并运行显示:
I'm Second derivative
我想知道标准中是否有关于这种情况的令人信服的规则,或者它是否依赖于平台?