C++ C++;函数获取特定的函子,但使用基类中的函数 A类{ virtual void operator()(int a,int b){cout

C++ C++;函数获取特定的函子,但使用基类中的函数 A类{ virtual void operator()(int a,int b){cout,c++,inheritance,parameters,operator-keyword,functor,C++,Inheritance,Parameters,Operator Keyword,Functor,必须继承public才能具有多态性: 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

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

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)
}
此外:

  • 您不能在
    const
    对象上调用非
    const
    成员函数,因此将
    operator()
    设置为
    const
  • 操作员必须是
    公共的
    ,而不是
    私人的
  • main
    中添加
    return
    (不是强制性的,但函数是
    int main
    ,最好有
    return

发布真实代码。这无法编译。好的,我已经成功地完成了这项工作…不过,谢谢:)至于const,我忘记了它们(编写快速代码而不运行它..)与main return的原因相同;)@RippeR您能发布问题中所述的实际问题代码b/c吗?它不可能编译并提供答案,否则这不是一个真正的问题为什么要在main中添加return?不是强制性的(对),但仍然(仍然是什么?)原始代码(没有Graph类,我猜不需要)类似于这里(我已经把它修改好了,不再让它满了):(不确定是否可以在注释中粘贴代码,所以我把它放在了那里)。它没有按照我想要的那样工作(总是使用“运算符(),即使对象来自B,所以我重写了它,现在不知何故,它神奇地工作了……我想一定是拼写错误或类似的东西。@ArmenTsirunyan-edited)(如果有关系的话)
// .......vvvvvv (omitting `public` means `private` by default
class B : public A {
//...