这是问题
我必须维护和改进这种风格的代码
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 */
}
这样的代码可以工作。
我找到了一种让所有孩子都能使用的通用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
时可以使用它,但是我们这里有2。
您是否知道如何添加适用于所有getname(int i)
的通用代码而不会破坏实际的合并?
答案 0 :(得分:1)
此问题是隐藏规则的一种表现形式。通过在派生类中声明其中一个getname()
函数,可以隐藏所有其他变体。
通常的解决方案是在每个派生类的定义中添加using Base::getname()
,只覆盖其中一个继承形式的getname()
。
或者,只需给出函数不同名称的不同变体。