C ++函数获取特定的函子但使用基类函数

时间:2013-04-24 12:53:41

标签: c++ inheritance parameters operator-keyword functor

class A {
   virtual void operator()(int a, int b) { cout << a + b << endl; }
};
class B : A {
   void operator()(int a, int b) { cout << a - b << endl; }
};
void f(int a, int b, const A &obj) {
   obj(a, b);
}
int main() {
   int a = 5, b = 3;;
   B obj;
   f(a, b, obj); // should give 2, but gives 8 (uses A's function even if it's virtual)
}

它不使用来自B类的operator()但使用一个frome类A(即使它被设置为虚拟,因此它应该使用B的op())。 知道怎么解决吗?

tl; dr - 当我给出从基类继承的特定类的参数(哪种类型是最基本的类)对象时,我想使用特定的运算符,而不是基类运算符。

1 个答案:

答案 0 :(得分:1)

您必须继承public才能拥有多态性:

// .......vvvvvv (omitting `public` means `private` by default
class B : public A {
//...

此外:

  • 您无法在const对象上调用非const成员函数,因此请operator()const
  • 运营商必须是public,而不是private
  • return中添加main(不是强制性的,但功能为int main,最好有return