我有一个抽象类A
和一个纯虚函数toDoOrNotToDo
。我有两个子类A1
和A2
,因此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;
};
我有一个我不需要的参数。
如何改进设计?
答案 0 :(得分:4)
首先确定界面。如果函数不需要int
参数,则实现不能在不违反Liskov Substitution Principle的情况下要求它。
如果需要它,只需将它放入接口类即可。只要参数记录为"可能不会影响结果,"一切都很好。
然而,对我来说整个看起来像是一个糟糕的设计 - 也许抽象不是真的有效而且你是否正在使用错误的工具来完成工作?