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

Two override functions of the same pure-virtual function with different parameters?

我有一个抽象classA和一个纯虚函数toDoOrNotToDo。我有两个子 classes,A1A2,这样 A1 需要 toDoOrNotToDoconst int x 参数来完成它的工作,并且A2 不需要该参数来完成它的工作。

但是如果我写

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

明显会报错:

‘int A2::toDoOrNotToDo() const’ marked override, but does not 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;
};

但是 A2::toDoOrNotToDo 我有一个不需要的参数。

如何改进设计?

先确定接口。如果函数不需要 int 参数,那么在不违反 Liskov Substitution Principle.

的情况下,实现不能要求它

如果需要,直接放入界面即可class。只要参数记录为 "may not affect the result," 就没问题。

但是,整个情况对我来说似乎是一个糟糕的设计——也许抽象并不是真正有效的,你使用了错误的工具来完成这项工作?