将子类作为父类传递给方法

mil*_*ler 3 c++ oop

class Method {
  public:    
  virtual void Rum();
};
class Euler : public Method {
  virtual void Rum() {
    printf("ahoj\n");
  }    
};
class Kutta : public Method {
  virtual void Rum() {
    printf("ahoj2\n");
  }    
};
class Simulator {
  public:
  Method *pointer;
  Simulator();
  void setmethod(Method m) { pointer = &m; }
};

int main() {
  Simulator s;
  s.setmethod(new Kutta());
  s.pointer->Rum();
  s.setmethod(new Euler());
  s.pointer->Rum();
}
Run Code Online (Sandbox Code Playgroud)

我希望这个例子足够好理解。我试图应用继承原则,但我得到了这些错误:(OOP 的东西在我的脑海中似乎有点混乱)

prog.cpp: In function ‘int main()’:
prog.cpp:26: error: no matching function for call to ‘Simulator::setmethod(Kutta*)’
prog.cpp:21: note: candidates are: void Simulator::setmethod(Method)
prog.cpp:28: error: no matching function for call to ‘Simulator::setmethod(Euler*)’
prog.cpp:21: note: candidates are: void Simulator::setmethod(Method)
Run Code Online (Sandbox Code Playgroud)

那么传递孩子而不是父母的正确方法是什么?谢谢!

Som*_*ame 5

你的签名void setmethod(Method m)不正确。它必须void setmethod(Method* m)与您的调用相匹配。

作为旁注,您的方法中需要一个引用或一个指针才能使多态工作 - 这意味着您不能setmethod按值传递参数并期望多态工作。