我不确定我的标题是否足够冗长,但我不知道如何更好地用文字表达。
基本上我想要,例如,这些类:

class A {};
class B : public A{};
class C : public A{};

这两个函数:
void cry(B* param){ cout << "Wee"; };
void cry(C* param){ cout << "Woo"; };

和这段代码:
int main()
{
    A* weener = new B();
    A* wooner = new C();
    cry(weener);
    cry(wooner);
}

我希望这个输出:
wee
woo

但是,就我而言,这甚至无法编译。这可能吗?如果是,正确的方法是什么?
PS:cry 函数必须在类之外

最佳答案

一个简单的解决方法是定义一个 cry 函数,该函数根据其参数的动态类型选择其行为:

void cry(A* param)
{
    if( dynamic_cast<B*>(param) ) //do something
        ;
    else if( dynamic_cast<C*>(param) ) // do something else
        ;
}

显然,这是在运行时解决的,并且带来了(通常可以忽略不计)的性能成本。

关于c++ - 使用基类参数调用派生类参数的函数重载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31556683/

10-13 07:16