c++ - 将子类作为父类传递给方法

标签 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();
}

我希望这个例子足够容易理解。我试图应用继承原则,但我得到了这些错误:(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)

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

最佳答案

您的 void setmethod(Method m) 签名不正确。它必须是 void setmethod(Method* m) 才能匹配您的调用。

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

关于c++ - 将子类作为父类传递给方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13663919/

相关文章:

c++ - 将函数打印的输出重定向到控制台到字符串

c++ - Winsocks 2异步问题

performance - 在 C# 中进行模拟退火时,OOP 比结构化编程慢得多。为什么以及如何修复它?

Python网络驱动程序: reusing setUp and tearDown

python - 我应该使用 "self"来定义不需要从外部访问的类实例化变量/对象吗?

ruby-on-rails - Rails 的多级委托(delegate)是否违反 Demeter 法?

c++ - 如何使用 C++ 创建多列列表/vector

将一个类传递给另一个类的构造函数时,C++ 无默认构造函数错误

PHP 类型提示 : array supported, 对象不是?

c++ - 字符数组的初始值设定项字符串对于 char[] 而言太长