C++-纯虚拟函数的参数

C++ - Parameters of a pure virtual function

本文关键字:参数 函数 虚拟 C++-      更新时间:2023-10-16

如果我有一个类,那么说

class Base {
 public:
  virtual void func() = 0;
};

这是另外两个类别的基础

class DerivedA1 : public Base {
 public:
  virtual bool func(string command);
};
class DerivedB1 : public Base {
 public:
  virtual void func();
}
class DerivedA2 : public DerivedA1 {
 public:
  bool func(string command);     //This one implements it differently
};                                 //its base class.

以上内容允许吗?我声明了不带参数的func(),但随后我将它与参数一起使用。我的代码中也有类似的情况,我无法发布,因为这是学校作业的一部分,并且出现了类似的错误

error: no matching function for call to Base::fucn(std::string&)
note: candidate is: virtual bool Base::move();
note: candidate expects 0 arguments, provided  1

我希望func()在其不同的派生类中以不同的方式使用。如何解决此问题?

DerivedA1::func(string)隐藏Base::func()。这是允许的,但不会覆盖Base::func的行为。clang会警告你这一点,因为它几乎总是一个错误

class DerivedA1 : public Base {
 public:
  virtual bool func(string command);
};

这很好:

class DerivedB1 : public Base {
 public:
  virtual void func();
}

这将覆盖DerivedA1::func(string)。一种只存在于DervivedA1接口或从其派生的东西上的虚拟函数。在Base 上不存在

class DerivedA2 : public DerivedA1 {
 public:
  bool func(string command);     //This one implements it differently
};