| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > static в виртуальном методе класса |
| Автор: bel_nikita 9.2.2006, 12:53 | ||
Статическая функция класса понятно: одна для всех объектов данного класса. А вот, статическая переменная в виртуальном методе класса - это как будет?
|
| Автор: Ignat 9.2.2006, 12:58 |
| bel_nikita, а почему в методе, а не как член класса? ИМХО, будет для каждого свой, т.к. нет видимости вне метода. |
| Автор: volvo877 9.2.2006, 13:30 | ||||
bel_nikita, а проверить?
В результате имеем
Значит, все-же переменная-то одна... |
| Автор: azesmcar 9.2.2006, 14:33 | ||
А какая разница? Для обычной функции то одна...без разницы для виртуальной или нет...виртуальная функция тоже функция |
| Автор: Aveic 9.2.2006, 14:55 |
| вопрос, какой-то надуманный... не мог же произойти конфликт между эти статическими переменными, функции то для каждого объекта разные... |
| Автор: Ignat 9.2.2006, 15:01 |
| При чем тут конфликт? Речь о том будет доступ или нет... |
| Автор: azesmcar 9.2.2006, 15:34 | ||||||||
| Забыл добавить что написанное мной действует в области одной функции... volvo877 К примеру если наследовать от класса B
получим
Добавлено @ 15:38 Но тут уж полиморфизм невиновен код
также выдаст нам
|
| Автор: Ignat 9.2.2006, 15:52 |
| А мне вот стало интересно, возможно ли обратиться к этой переменной вне метода? С одной стороны переменная локальна и невидна, с другой стороны размещение в памяти не меняется... Можно ли создать указатель на неё? |
| Автор: azesmcar 9.2.2006, 16:00 | ||||||
А я вот другого не понял...какая разница? статическая, нестатическая...функция все равно одна на все обьекты класса...просто this разный передается...не xотите же вы сказать что при создании каждого обьекта класса заново копируются функции...причем тут это? Я думаю "Для разныx функций разные, для одной одно и тоже" звучит как ответ... Ignat можно так
получим 0 1 Добавлено @ 16:01 Кстати static int& f() можно заменить на int& f()...дело вкуса Добавлено @ 16:04 со static int & можно даже вне класса
|
| Автор: Earnest 9.2.2006, 19:39 | ||
Просто так - нельзя, она ниоткуда не видима, кроме метода, где объявлена. Но, поскольку она выделена в глобальной памяти, на нее вполне можно вернуть ссылку или указатель, из этого метода, и спокойно пользоваться. У статической переменной, объявленной внутри функции, есть еще одна особенность - она конструируется при первом входе в этот метод, а не тогда, когда обычные глобальные переменные. Иногда это очень удобно: некоторые переменные можно конструировать только после инициализации, скажем, каких-то ресурсов, а хочется тем не менее иметь их статическими... |