调用隐藏基类方法的最佳方法

时间:2013-12-13 16:53:42

标签: c++ override hidden

在下面的代码中,“d.Foo()”抛出编译器错误,声称函数Foo()不接受0参数。然而,基类中存在具有该名称的0参数函数。行“d.Base :: Foo()”是可以接受的。

我有一个模糊的记忆,即在派生类中使用函数名隐藏了基类中该名称的所有函数,即使参数可能不同。我不记得为什么,也不记得避免这个问题的最佳方法。我的解决方案是最好的,还是有另一种方法可以获得Base :: Foo()?

非常感谢!

ROBR

// Override.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
class Base
{
public :
    void Foo()
    {
    }
};

class Derived : public Base
{
public: 
    void Foo(int x)
    {
    }
};

int _tmain(int argc, _TCHAR* argv[])
{
    Derived d;
    d.Foo();
    d.Base::Foo();

    return 0;
}

2 个答案:

答案 0 :(得分:3)

您可以通过using

使用(!)基类成员函数
class Derived : public Base {
public:
    using Base::Foo;
};

答案 1 :(得分:1)

您可以将Derived::Foo()定义为:

class Derived : public Base {
public:
    void Foo() { Base::Foo(); }
};