c – 从派生类调用重载函数.

参见英文答案 > C++ inheritance and function overriding                                    3个
我正在尝试在Visual Studio 2010中编译下一个代码:

A {
public:
  void f(int i) {cout << i;}
};

class B: public A {
public:
  void f(string s) {cout << s;}
};

void main() {
  A a;
  B b;

  a.f(1);
  b.f("zazaza");
  b.f(1); //Compilation fail
}

但编译失败了.我无法理解为什么我不能从父类调用f(int).我该怎么做才能解决这个问题?

最佳答案
void f(string);在派生类中隐藏父级的同名方法,而不是覆盖它.您可以在派生类中使用using关键字来取消隐藏它.

class B: public A
{
public:

    using A::f;
    //^^^^^^^^^

    void f(string s)
    {
        cout << s;
    }
};

现在,两个f方法都相互重载,f(int)是可用的.

转载注明原文:c – 从派生类调用重载函数. - 代码日志