我不明白为什么会发生这种现象:
class Base
{
public:
virtual void enablePolymorphism();
};
class Derived : public Base
{
public:
void enablePolymorphism();
};
class Derived2 : public Base
{
public:
void enablePolymorphism();
};
void callMe(Base base)
{
printf("base");
}
void callMe(Derived derived)
{
printf("derived");
}
void callMe(Derived2 derived2)
{
printf("derived2");
}
int main()
{
Base* pointer = new Derived();
Base* pointer2 = new Derived2();
callMe(*pointer);
callMe(*pointer2);
return 0;
}
这就是我实际上要我的代码执行的操作,并且我希望方法callMe()在类之外,因此我不能使用虚函数,我希望在运行时让程序在我执行callMe时调用callMe(Derived推导) (* pointer)和callMe(Derived2派生2),当我执行callMe(* pointer2)时,其输出将派生为derived2,但事实并非如此,在编译时,指针和pointer2被取消引用时假定为基类,所以callMe而是调用(Base base),输出是basebase。如何获得所需的输出?谢谢。
最佳答案
void callMe(A);
void callMe(B);
A*ptr;
callMe(*ptr); // guess which of the above is called?
这与多态无关,只是简单的重载分辨率。