具有不同参数的相同纯虚函数的两个覆盖函数?

时间:2016-01-14 11:03:53

标签: c++ inheritance abstract-class pure-virtual

我有一个抽象类A和一个纯虚函数toDoOrNotToDo。我有两个子类A1A2,因此A1需要const int x的{​​{1}}参数才能完成工作,toDoOrNotToDo不会#39; t需要该参数来完成它的工作。

但如果我写

A2

显然会抱怨:

  

'int A2 :: toDoOrNotToDo()const'标记覆盖,但不覆盖

我可以写:

class A2 : public A {
public:
    int toDoOrNotToDo() const override;
};

但是在class A { public: virtual int toDoOrNotToDo(const int x) const = 0; virtual ~A(); }; class A1 : public A { public: int toDoOrNotToDo(const int) const override; }; class A2 : public A { public: int toDoOrNotToDo(const int) const override; }; 我有一个我不需要的参数。

如何改进设计?

1 个答案:

答案 0 :(得分:4)

首先确定界面。如果函数不需要int参数,则实现不能在不违反Liskov Substitution Principle的情况下要求它。

如果需要它,只需将它放入接口类即可。只要参数记录为"可能不会影响结果,"一切都很好。

然而,对我来说整个看起来像是一个糟糕的设计 - 也许抽象不是真的有效而且你是否正在使用错误的工具来完成工作?