具有不同参数的同一纯虚函数的两个覆盖函数
Two override functions of the same pure-virtual function with different parameters?
我有一个抽象类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
参数,则在不违反 Liskov 替换原则的情况下,实现就不能要求它。
如果需要,只需将其放入接口类中即可。只要参数被记录为"可能不会影响结果",一切都很好。
然而,对我来说,整个场景看起来是一个糟糕的设计——也许抽象并不真正有效,你使用了错误的工具来完成工作?
相关文章:
- 使用可变参数函数覆盖具有不同函数签名的虚函数
- 如何使用用户定义的函数覆盖 C lib 函数,如 _sbrk?
- 函数覆盖有哪些用例?
- 在子类函数覆盖中省略具有默认值的参数
- C++ 成员变量被非成员函数覆盖
- 用现有函数覆盖虚拟函数
- 函数覆盖是否由编译器自动完成
- 结构被库函数覆盖
- 当在Python中定义__str__时,如何将C 的标准全局函数覆盖
- C++类是否解决函数覆盖问题
- 用私有基函数覆盖公共虚拟函数
- 优先级队列中复制构造函数覆盖的值
- 虚拟函数覆盖预期错误
- C++中的函数覆盖无需"虚拟"即可工作
- C++虚拟函数覆盖
- 如何用非虚拟函数覆盖虚拟函数
- 基成员函数的所有重载是否可以被单个模板化成员函数覆盖和转发到
- C++继承函数覆盖
- 纯虚函数覆盖虚函数
- 引用项目的Qt-main()函数覆盖实际项目的main()