Почему флаг GCC -Wshadow не поднимается для затенения переменных-членов при наследовании этого кода?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Почему флаг GCC -Wshadow не поднимается для затенения переменных-членов при наследовании этого кода?

Сообщение Anonymous »

Я пытаюсь понять затенение членов при наследовании.
Рассмотрим этот код с наследованием, где оба класса имеют общедоступный элемент данных с именем x.

Код: Выделить всё

class A {
public:
int x;
};

class B : public A {
public:
int x;
};

int main(void)
{
B test;
return 0;
}
Когда я компилирую это с помощью: c++ -Wshadow file.cpp
я не получаю никаких предупреждений. Это меня смущает, потому что я понимаю, что затенение происходит, когда внутренняя область объявляет имя, которое уже объявлено во внешней области.
В этом случае B::x кажется быть затенением A::x, и затенение реально, потому что для доступа к A::x в B мне нужно будет использовать разрешение области: test.A::x
Чего мне не хватает в том, как -Wshadow работает с наследованием? Это не считается затенением или есть что-то особенное в переменных-членах при наследовании?

Подробнее здесь: https://stackoverflow.com/questions/793 ... ng-in-inhe
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»