Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
327 / 252 / 58
Регистрация: 12.12.2012
Сообщений: 2,048
1

Назначение static ?

09.03.2013, 15:59. Показов 1929. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Я уже прочитал в двух книгах про статик,читал в википедии,но так и не понимаю для чего он ? Кучи больших текстов и объяснений для чего он,я так и не пойму конкретно,когда мне его нужно использовать.


Вы бы не могли максимально просто и понятно объяснить?) Неплохо было бы с простыми примерами. То есть когда для переменных использовать,когда для функций.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.03.2013, 15:59
Ответы с готовыми решениями:

Объяснить назначение ключевого слова static
Здравствуйте! Я пытаюсь разобраться с использованием static`a и у меня такой вопрос: будет ли...

Чем отличается static local variable от static global variable?
привет вроде уже ребята объясняли, но что -то я не понял.... скажите пожалуйста,чем...

Static
Как выходит 10 ?? #include <iostream> using namespace std; int f1(int k) { static int...

Static
zagolovok.hpp static int a; основной модуль #include <iostream> #include...

20
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
09.03.2013, 16:01 2
Цитата Сообщение от pEntity Посмотреть сообщение
но так и не понимаю для чего он ?
Его назначение зависит от того, где он используется.
1
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
Цитата Сообщение от pEntity Посмотреть сообщение
Я и без статика смогу использовать переменную при многократном вызове функции
Это если вы ее глобальной объявите. Тоесть до объявления самой функции, в которой она будет использована.
1
327 / 252 / 58
Регистрация: 12.12.2012
Сообщений: 2,048
09.03.2013, 16:10  [ТС] 7
Это я понял. А когда в функции пишут static void Test() {} это как понимать?
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
09.03.2013, 16:12 8
Цитата Сообщение от pEntity Посмотреть сообщение
Я понимаю,но вы бы не могли рассказать о статике,что нужно знать,дабы его применять?
Ограничивает область видимости глобальных переменных текущим модулем
Для функций тоже самое.
Для локальных переменных в функции - пост #4
Статические поля класса и методы.
1
59 / 58 / 7
Регистрация: 03.02.2013
Сообщений: 167
09.03.2013, 16:12 9
Цитата Сообщение от pEntity Посмотреть сообщение
static void Test() {} это как понимать?
с таким не сталкивался.
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
09.03.2013, 16:13 10
Цитата Сообщение от pEntity Посмотреть сообщение
А когда в функции пишут static void Test() {} это как понимать?
Это значит, что область видимости функции ограничена данным модулем.
1
327 / 252 / 58
Регистрация: 12.12.2012
Сообщений: 2,048
09.03.2013, 16:23  [ТС] 11
Цитата Сообщение от Croessmah Посмотреть сообщение
Это значит, что область видимости функции ограничена данным модулем.
А для чего это допустим нужно?
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
09.03.2013, 16:23 12
Цитата Сообщение от Croessmah Посмотреть сообщение
Ограничивает область видимости глобальных переменных текущим модулем
Кликните здесь для просмотра всего текста
Два файла:
C++
1
2
3
4
5
6
7
#include <iostream>
static int c=10;
void print1();
int main(){
    std::cout<<c<<std::endl;
    print1();
}
C++
1
2
3
4
5
#include <iostream>
static int c=5;
void print1(){
    std::cout<<c<<std::endl;
}
Название: код_1.png
Просмотров: 51

Размер: 1.8 Кб
А попробуйте без static



Цитата Сообщение от Croessmah Посмотреть сообщение
Для функций тоже самое.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
#include <iostream>
void print1();
void foo();
int main(){
    print1();
    foo();
}
C++
1
2
3
4
5
6
#include <iostream>
void print1(){
    std::cout<<"print1"<<std::endl;
}
static void foo(){
}
Назначение static ?

попробуйте без static
1
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
09.03.2013, 16:26 13
Вообще, static перед чем нибудь, говорит о том, что это что-то хранится в статическтй памяти, а значит будет существовать до конца программы. Если static стоит перед тем, что и так хранится в статической памяти (глобальные переменные, функции и т.д.), то это значит, что это что-то имеет ограниченную (в отличие от того, если бы перед ним static не стоял) область видимости (текущий модуль).
1
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
09.03.2013, 16:28 14
Цитата Сообщение от Croessmah Посмотреть сообщение
Для локальных переменных в функции - пост #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
int foo(){
    static int c=0;
    return c++;
}
 
int foo_NS(){
    int c=0;
    return c++;
}
 
int main(){
    std::cout<<foo()<<std::endl;
    std::cout<<foo()<<std::endl;
    std::cout<<foo()<<std::endl<<std::endl;
    std::cout<<foo_NS()<<std::endl;
    std::cout<<foo_NS()<<std::endl;
    std::cout<<foo_NS()<<std::endl;
}
Название: код_3.png
Просмотров: 51

Размер: 1.8 Кб
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
09.03.2013, 16:30 15
Цитата Сообщение от pEntity Посмотреть сообщение
А для чего это допустим нужно?
Например, написали мы супер-пупер библиотеку, у нас есть функции, с которыми могут работать пользователи библиотеки, а есть функции, необходимые для внутренней реализации библиотеки, делаем их static и они не видны из других модулей.
Что-то на подобии private в классе.
1
327 / 252 / 58
Регистрация: 12.12.2012
Сообщений: 2,048
09.03.2013, 16:34  [ТС] 16
Ага,это понятно. Спасибо большое. А как еще понять,что они не будут видны из других модулей ?
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
09.03.2013, 16:42 17
Цитата Сообщение от pEntity Посмотреть сообщение
А как еще понять,что они не будут видны из других модулей ?
Посмотрите пример с функциями. В модуле 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
Цитата Сообщение от alsav22 Посмотреть сообщение
то она инициализируется один раз при запуске программы первом входе в блок, а при последующих заходах в этот блок она уже не будет (в отличие от локальных переменных) больше инициализироваться.
Починил.
1
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
09.03.2013, 17:45 20
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Починил.
Тогда и у Праты почините...
Миниатюры
Назначение static ?  
1
09.03.2013, 17:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.03.2013, 17:45
Помогаю со студенческими работами здесь

Назначение функций
Добрый день, дана программа. #include &quot;Cipher.h&quot; #include &lt;cstdlib&gt; #include &lt;cstdio&gt;...

Назначение оператора ::
Добрый день! Сейчас изучаю классы и в примерах часто сталкиваюсь с конструкциями типа void...

Назначение комментария
:-|Назначение комментария. Как указать комментарий в программе С++?

static const
объясните, пожалуйста, вот такую странную конструкцию (накопал в старой проге): после #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru