我不确定我的标题是否足够冗长,但我不知道如何更好地用文字表达。 基本上我想要,例如,这些类:
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函数必须在类
之外答案 0 :(得分:2)
一个简单的解决方法是定义一个cry
函数,根据其参数的动态类型选择其行为:
void cry(A* param)
{
if( dynamic_cast<B*>(param) ) //do something
;
else if( dynamic_cast<C*>(param) ) // do something else
;
}
很明显,这在运行时得到解决,并且具有(通常可以忽略不计)性能成本。
答案 1 :(得分:0)
你必须施放这些物体:
cry(static_cast<B*>(weener));
cry(static_cast<C*>(wooner));
否则编译器将查找以cry
为参数的A*
函数(因为weener
和wooner
确实被声明为A*
的类型)。