这就是问题所在
我必须维护和改进这种风格的代码
class Base {
virtual char *getname() {return NULL}
virtual char *getname(int i);
}
class Child1 : public base {
virtual char *getname() { //its own treatment */
virtual char *getname(int i) { / its treatment */
}
class Child2 : public base {
virtual char *getname() { //its own treatment */
virtual char *getname(int i) { / its treatment */
}
这样的代码有效。
我找到了一种方法来获得适用于所有 child 的通用getname(int i)
,所以我做到了
class Base {
virtual char *getname() {return NULL}
virtual char *getname(int i) {the new generic code};
}
class Child1 : public base {
virtual char *getname() { //its own treatment */
/*virtual char *getname(int i) {*/
}
class Child2 : public base {
virtual char *getname() { //its own treatment */
/*virtual char *getname(int i) */
}
我遇到的问题是方法隐藏。
重写getname()
隐藏了基类的getname(int i)
。
在基类中,我们必须维护具有这些名称的 2 个方法以实现兼容性。
使用base::getname
的解决方案,我觉得这里不能用,因为当我们只有一个版本的getname
时可以用基类,但这里我们有两个。
您知道如何在不破坏实际行为的情况下添加适用于所有 getname(int i)
的通用代码吗?
最佳答案
这个问题是隐藏规则的表现。通过在派生类中声明其中一个 getname()
函数,隐藏所有其他变体。
通常的解决方案是在每个派生类的定义中添加 using Base::getname()
,它只覆盖 getname()
的一种继承形式。
或者,只需为函数的不同变体指定不同的名称。
关于c++ - 重写 2 个重载继承方法之一 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29556588/