清除函数在C++中隐藏编译器警告
问题描述:
我在编译器中“隐藏”警告,因为从父类继承的类具有相同的名称但参数不同。清除函数在C++中隐藏编译器警告
添加一个函数,只是推出一个警告,说这个函数什么都不做(这在基类中是正确的,但没有警告),它将基类函数的参数和名称与派生类匹配清除此编译器警告。这对派生类有什么潜在的连锁效应?
编辑:假设我不希望他们能够使用基类功能。 (不要问)。
答
您的用户无法通过派生实例访问基类函数,但没有明确写出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
答
重新定义的名称在派生类有效地隐藏基类中的函数。这就是警告告诉你的! :-)
这是一个警告,因为通常这是一个错误。如果是有意的,那就没问题(但非常罕见)。
我应该更具体。基类函数什么都不做,应该是虚拟的,但我没有权限更改该库。我只需要确保它没有被调用。 – deworde 2011-04-08 14:59:20
@deworde:你不能“确保它没有被调用”,但是在派生类中提供隐藏定义可能会有所帮助。 – 2011-04-08 15:56:23