Удаление функций, скрывающих предупреждения компилятора в C ++ - PullRequest
1 голос
/ 08 апреля 2011

Я получаю "скрывающие" предупреждения в моем компиляторе, потому что класс, наследуемый от своего родителя, имеет то же имя, но разные параметры.

Добавление функции, которая просто выдвигает предупреждение, чтобы сказать, что эта функция ничего не делает (как верно в базовом классе, но без предупреждения), которое сопоставляет параметры и имя функции базового класса с производным классом, очищает это предупреждение компилятора. Каковы потенциальные побочные эффекты этого для производного класса?

РЕДАКТИРОВАТЬ: Предположим, что я не хочу, чтобы они могли использовать функцию базового класса. (Не спрашивай).

Ответы [ 3 ]

2 голосов
/ 08 апреля 2011

Переопределение имени в производном классе эффективно скрывает функцию в базовом классе. Вот что говорит вам предупреждение! : -)

Это предупреждение, потому что обычно это ошибка. Если это специально, это нормально (но очень редко).

1 голос
/ 08 апреля 2011

Неспособность ваших пользователей получить доступ к функции базового класса через производный экземпляр без явного выписывания myDerivedObj.Base::foo(), что они вряд ли будут делать.

Вместо этого, чтобы ваши сигнатуры функций совпадали,или измените имя функции.

0 голосов
/ 08 апреля 2011

Вам необходимо отобразить функцию базового класса в производном классе как:

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

...