在下面的代码中,“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;
}
答案 0 :(得分:3)
您可以通过using
class Derived : public Base {
public:
using Base::Foo;
};
答案 1 :(得分:1)
您可以将Derived::Foo()
定义为:
class Derived : public Base {
public:
void Foo() { Base::Foo(); }
};