Нет предупреждения о скрытии не виртуальных методов с аналогичным прототипом (G ++ 4.4) - PullRequest
1 голос
/ 21 ноября 2011

В наших проектах бывает (редко, но бывает), что в производном классе не виртуальный метод из базового класса скрыт методом с тем же прототипом.В этом случае компилятор (в нашем случае g ++ 4.4) хранит молчание.Хотя я вижу, что никакое предупреждение не может быть полезным для частных методов, для защищенных или открытых методов это должно быть как минимум настраиваемое предупреждение.

Если такое существует, я не могу его найти.

Вот небольшой пример, на который я бы хотел, чтобы g ++ пожаловался (будьте уверены, что этот вид кода-паттерна никогда не пишется таким образом за один раз, обычно в какой-то момент работа была виртуальным методом в A и быланеобъяснимо изменилось позже):

class A
{
public:
    void work(int p)
    { /* do something */ }
};

class B : public A
{
public:
    void work(int p) 
    { /* do something different */ }
};

Результат: без предупреждения даже с -Wall -Wextra.

1 Ответ

1 голос
/ 21 ноября 2011

Вы не переопределяете метод, вы его скрываете.Это функция C ++.

Вы можете взглянуть на эту ссылку .

Кроме того, интересный фрагмент:

Примечание: предупрежденияне являются частью стандарта, поэтому ваш компилятор может или не может дать вышеупомянутое предупреждение.

...