2011-04-08 24 views
1

我在编译器中“隐藏”警告,因为从父类继承的类具有相同的名称但参数不同。清除函数在C++中隐藏编译器警告

添加一个函数,只是推出一个警告,说这个函数什么都不做(这在基类中是正确的,但没有警告),它将基类函数的参数和名称与派生类匹配清除此编译器警告。这对派生类有什么潜在的连锁效应?

编辑:假设我不希望他们能够使用基类功能。 (不要问)。

回答

1

您的用户无法通过派生实例访问基类函数,但没有明确写出myDerivedObj.Base::foo(),他们不太可能这样做。

使您的功能签名相匹配,或改变功能名称。

+0

我应该更具体。基类函数什么都不做,应该是虚拟的,但我没有权限更改该库。我只需要确保它没有被调用。 – deworde 2011-04-08 14:59:20

+0

@deworde:你不能“确保它没有被调用”,但是在派生类中提供隐藏定义可能会有所帮助。 – 2011-04-08 15:56:23

0

您需要取消隐藏的基类函数在派生类如:

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

+0

我应该更具体。基类函数什么都不做,应该是虚拟的,但我没有权限更改该库。我只需要确保它没有被调用。 – deworde 2011-04-08 14:59:50

+0

@deworde:你为什么不发布一些代码,以便我们可以更好地理解你的问题? – Nawaz 2011-04-08 15:01:30

2

重新定义的名称在派生类有效地隐藏基类中的函数。这就是警告告诉你的! :-)

这是一个警告,因为通常这是一个错误。如果是有意的,那就没问题(但非常罕见)。