具有不同参数的同一个纯虚函数的两个覆盖函数?
Two override functions of the same pure-virtual function with different parameters?
我有一个抽象classA
和一个纯虚函数toDoOrNotToDo
。我有两个子 classes,A1
和 A2
,这样 A1
需要 toDoOrNotToDo
的 const 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," 就没问题。
但是,整个情况对我来说似乎是一个糟糕的设计——也许抽象并不是真正有效的,你使用了错误的工具来完成这项工作?
我有一个抽象classA
和一个纯虚函数toDoOrNotToDo
。我有两个子 classes,A1
和 A2
,这样 A1
需要 toDoOrNotToDo
的 const 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," 就没问题。
但是,整个情况对我来说似乎是一个糟糕的设计——也许抽象并不是真正有效的,你使用了错误的工具来完成这项工作?