![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
OlegSK |
|
|||
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 17.7.2010 Репутация: нет Всего: нет |
Помогите, плиз, разобраться со статическими переменными-членами класса. Неожиданно для себя столкнулся с тем, что эта тема гораздо более головоломная, чем казалась с самого начала. Например, выяснилось, что значение статической переменной-члена класса разделяется не только между всеми объектами класса, в котором она определена, но и всеми объектами классов-наследников данного класса. Хотелось бы получить объяснение работы следующей программы, т.к. она работает не так, как я от нее ожидаю:
В этой программе я попытался сделать так, чтобы значение статической переменной h_TestVar не разделялось между классами cBasic и cTest. Собственно, непонятка происходит в строке, которая отмечена комментарием. Непонятка заключается в том, что метод h_GetVar() класса cTest возвращает значение не той статической переменной которой требуется. Раз этот метод вызывается в классе cTest, то я ожидаю, что он вернет мне значение статической переменной h_TestVar, которая объявлена в этом классе. Вместо этого, мне возвращается значение статической переменной h_TestVar, которая объявлена в классе cBasic... Это вообще нормально? Почему так происходит? Разве переменная-член h_TestVar объявленная в классе с Test не должна перекрывать одноименную переменную член из класса cBasic? С другой стороны, метод h_GetVar_2 класса cTest делает то, что я от него и ожидаю, а значит перекрытие статической переменной все таки происходит... Это сообщение отредактировал(а) OlegSK - 20.6.2011, 03:20 |
|||
|
||||
asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: 3 Всего: 5 |
вроде все правильно, метод и переменная объявлены в одном и том же классе, вот h_GetVar() и возвращает то что он видит, то есть переменную член своего класса. h_GetVar_2() видит уже перекрывающюю переменную из своего класса.
|
|||
|
||||
OlegSK |
|
|||
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 17.7.2010 Репутация: нет Всего: нет |
||||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |