C ++ - 纯虚函数的参数

时间:2016-04-02 18:30:32

标签: c++ inheritance pure-virtual

如果我有课时说

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()在其不同的派生类中使用不同。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

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
};