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
参数,那么实现在不违反
如果需要,只需将其放入接口类中即可。只要参数记录为“可能不会影响结果”,一切都很好
然而,对我来说,整个情况看起来像是一个糟糕的设计,可能抽象不是真正有效的,您使用了错误的工具来完成任务?您可以使用默认参数来代替。只要这些函数没有相同的签名,它们就永远不会在虚拟继承中匹配。您可以使用默认参数。只要这些函数没有相同的签名,它们就永远不会在虚拟继承中匹配。