C++ 具有不同参数的同一纯虚函数的两个重写函数?

C++ 具有不同参数的同一纯虚函数的两个重写函数?,c++,inheritance,abstract-class,pure-virtual,C++,Inheritance,Abstract Class,Pure Virtual,我有一个抽象类A和一个纯虚拟函数toDoOrNotToDo。我有两个子类,A1和A2,因此A1需要toDoOrNotToDo的const int x参数来完成它的工作,而A2不需要该参数来完成它的工作 但是如果我写 class A2 : public A { public: int toDoOrNotToDo() const override; }; 它显然会抱怨: “int A2::toDoOrNotToDo()const”标记了覆盖,但未覆盖 我可以写: class A { pub

我有一个抽象类
A
和一个纯虚拟函数
toDoOrNotToDo
。我有两个子类,
A1
A2
,因此
A1
需要
toDoOrNotToDo
const int x
参数来完成它的工作,而
A2
不需要该参数来完成它的工作

但是如果我写

class A2 : public A {
public:
    int toDoOrNotToDo() const override;
};
它显然会抱怨:

“int A2::toDoOrNotToDo()const”标记了覆盖,但未覆盖

我可以写:

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
参数,那么实现在不违反

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


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

首先决定界面。如果函数不需要
int
参数,那么实现在不违反

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


然而,对我来说,整个情况看起来像是一个糟糕的设计,可能抽象不是真正有效的,您使用了错误的工具来完成任务?

您可以使用默认参数来代替。只要这些函数没有相同的签名,它们就永远不会在虚拟继承中匹配。您可以使用默认参数。只要这些函数没有相同的签名,它们就永远不会在虚拟继承中匹配。