327 / 252 / 58
Регистрация: 12.12.2012
Сообщений: 2,048
|
|
1 | |
Назначение static ?09.03.2013, 15:59. Показов 1932. Ответов 20
Метки нет (Все метки)
Здравствуйте. Я уже прочитал в двух книгах про статик,читал в википедии,но так и не понимаю для чего он ? Кучи больших текстов и объяснений для чего он,я так и не пойму конкретно,когда мне его нужно использовать.
Вы бы не могли максимально просто и понятно объяснить?) Неплохо было бы с простыми примерами. То есть когда для переменных использовать,когда для функций.
0
|
09.03.2013, 15:59 | |
Ответы с готовыми решениями:
20
Объяснить назначение ключевого слова static Чем отличается static local variable от static global variable? Static Static |
327 / 252 / 58
Регистрация: 12.12.2012
Сообщений: 2,048
|
|
09.03.2013, 16:04 [ТС] | 3 |
Я понимаю,но вы бы не могли рассказать о статике,что нужно знать,дабы его применять?
0
|
59 / 58 / 7
Регистрация: 03.02.2013
Сообщений: 167
|
|
09.03.2013, 16:05 | 4 |
статические переменные (static int a; ) объявляются в теле функции и остаются в памяти после окончания жизни функции, тоесть их можно исппользовать при многократном вызове функции, например для счетчика вызовов.
своими словами=) про статические функции не слышал.
1
|
327 / 252 / 58
Регистрация: 12.12.2012
Сообщений: 2,048
|
|
09.03.2013, 16:07 [ТС] | 5 |
Я и без статика смогу использовать переменную при многократном вызове функции
0
|
59 / 58 / 7
Регистрация: 03.02.2013
Сообщений: 167
|
|
09.03.2013, 16:08 | 6 |
Это если вы ее глобальной объявите. Тоесть до объявления самой функции, в которой она будет использована.
1
|
327 / 252 / 58
Регистрация: 12.12.2012
Сообщений: 2,048
|
|
09.03.2013, 16:10 [ТС] | 7 |
Это я понял. А когда в функции пишут static void Test() {} это как понимать?
0
|
Неэпический
|
|
09.03.2013, 16:12 | 8 |
Ограничивает область видимости глобальных переменных текущим модулем
Для функций тоже самое. Для локальных переменных в функции - пост #4 Статические поля класса и методы.
1
|
59 / 58 / 7
Регистрация: 03.02.2013
Сообщений: 167
|
|
09.03.2013, 16:12 | 9 |
0
|
327 / 252 / 58
Регистрация: 12.12.2012
Сообщений: 2,048
|
|
09.03.2013, 16:23 [ТС] | 11 |
0
|
Неэпический
|
|||||||||||
09.03.2013, 16:23 | 12 | ||||||||||
Кликните здесь для просмотра всего текста
Два файла:
А попробуйте без static
1
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
09.03.2013, 16:26 | 13 |
Вообще, static перед чем нибудь, говорит о том, что это что-то хранится в статическтй памяти, а значит будет существовать до конца программы. Если static стоит перед тем, что и так хранится в статической памяти (глобальные переменные, функции и т.д.), то это значит, что это что-то имеет ограниченную (в отличие от того, если бы перед ним static не стоял) область видимости (текущий модуль).
1
|
Неэпический
|
||||||
09.03.2013, 16:28 | 14 | |||||
0
|
Неэпический
|
|
09.03.2013, 16:30 | 15 |
Например, написали мы супер-пупер библиотеку, у нас есть функции, с которыми могут работать пользователи библиотеки, а есть функции, необходимые для внутренней реализации библиотеки, делаем их static и они не видны из других модулей.
Что-то на подобии private в классе.
1
|
327 / 252 / 58
Регистрация: 12.12.2012
Сообщений: 2,048
|
|
09.03.2013, 16:34 [ТС] | 16 |
Ага,это понятно. Спасибо большое. А как еще понять,что они не будут видны из других модулей ?
0
|
Неэпический
|
|
09.03.2013, 16:42 | 17 |
Посмотрите пример с функциями. В модуле main.cpp вызываются две функции из модуля 1.cpp. Функция print является внешней(external) и видна. А функция foo объявлена как static, и возникает ошибка, т.к. её не видно вне модуля.
1
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
09.03.2013, 16:47 | 18 |
Добавлю ещё насчёт инициализации статических переменных. Если явно неизициализировать статическую переменную, то компилятор установит её равной 0. Элементы статических массивов и структур устанавливаются равным 0 по умолчанию. Если статическая переменная объявлена внутри блока (например в теле функции), то она инициализируется один раз при запуске программы, а при последующих заходах в этот блок она уже не будет (в отличие от локальных переменных) больше инициализироваться.
1
|
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
09.03.2013, 17:11 | 19 |
1
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
09.03.2013, 17:45 | 20 |
1
|
09.03.2013, 17:45 | |
09.03.2013, 17:45 | |
Помогаю со студенческими работами здесь
20
Назначение функций Назначение оператора :: Назначение комментария static const Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |