我在编译器中收到“隐藏”警告,因为从其父类继承的类具有相同的名称但参数不同。
添加一个仅发出警告以说明此函数不执行任何操作(在基类中也是如此,但没有警告)的函数,该函数将基类函数的参数和名称匹配到派生类会清除此编译器警告。这对派生类有什么潜在的连锁反应?
编辑:假设我不希望他们能够使用基类函数。(不要问)。
我在编译器中收到“隐藏”警告,因为从其父类继承的类具有相同的名称但参数不同。
添加一个仅发出警告以说明此函数不执行任何操作(在基类中也是如此,但没有警告)的函数,该函数将基类函数的参数和名称匹配到派生类会清除此编译器警告。这对派生类有什么潜在的连锁反应?
编辑:假设我不希望他们能够使用基类函数。(不要问)。
在派生类中重新定义名称有效地隐藏了基类中的函数。这就是警告告诉你的!:-)
这是一个警告,因为通常这是一个错误。如果是故意的,那没关系(但非常罕见)。
您的用户无法在没有明确写出的情况下通过派生实例访问基类函数myDerivedObj.Base::foo()
,而他们不太可能这样做。
使您的函数签名匹配,或者更改函数名称。
您需要将派生类中的基类函数取消隐藏为:
using Base::Function;
例子:
class Base
{
public:
void Function(int) { cout << "Function(int)" << endl; }
};
class Derived : public Base
{
public:
using Base::Function; //NOTE THIS LINE : Unhiding base class function!
void Function(const char *) { cout << "Function(const char *)" << endl; }
};
Derived d;
d.Function(10); //this calls Base::Function
演示:http: //ideone.com/OTBxg