我不明白为什么会发生这种现象:

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?


这与多态无关,只是简单的重载分辨率。

10-05 22:15