覆盖2个重载的heritated方法之一c ++

时间:2015-04-10 08:19:41

标签: c++

这是问题

我必须维护和改进这种风格的代码

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)的通用代码而不会破坏实际的合并?

1 个答案:

答案 0 :(得分:1)

此问题是隐藏规则的一种表现形式。通过在派生类中声明其中一个getname()函数,可以隐藏所有其他变体。

通常的解决方案是在每个派生类的定义中添加using Base::getname(),只覆盖其中一个继承形式的getname()

或者,只需给出函数不同名称的不同变体。