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