Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 373
#1

Назначение static ? - C++

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

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


Вы бы не могли максимально просто и понятно объяснить?) Неплохо было бы с простыми примерами. То есть когда для переменных использовать,когда для функций.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.03.2013, 15:59     Назначение static ?
Посмотрите здесь:

Private: static C++
C++ static-член
Опять static C++
C++ static const
C++ static и const
C++ static class
C++ static const?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
12798 / 7258 / 809
Регистрация: 27.09.2012
Сообщений: 17,921
Записей в блоге: 2
Завершенные тесты: 1
09.03.2013, 16:01     Назначение static ? #2
Цитата Сообщение от pEntity Посмотреть сообщение
но так и не понимаю для чего он ?
Его назначение зависит от того, где он используется.
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 373
09.03.2013, 16:04  [ТС]     Назначение static ? #3
Я понимаю,но вы бы не могли рассказать о статике,что нужно знать,дабы его применять?
Kins
59 / 58 / 6
Регистрация: 03.02.2013
Сообщений: 167
09.03.2013, 16:05     Назначение static ? #4
статические переменные (static int a; ) объявляются в теле функции и остаются в памяти после окончания жизни функции, тоесть их можно исппользовать при многократном вызове функции, например для счетчика вызовов.
своими словами=)
про статические функции не слышал.
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 373
09.03.2013, 16:07  [ТС]     Назначение static ? #5
Я и без статика смогу использовать переменную при многократном вызове функции
Kins
59 / 58 / 6
Регистрация: 03.02.2013
Сообщений: 167
09.03.2013, 16:08     Назначение static ? #6
Цитата Сообщение от pEntity Посмотреть сообщение
Я и без статика смогу использовать переменную при многократном вызове функции
Это если вы ее глобальной объявите. Тоесть до объявления самой функции, в которой она будет использована.
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 373
09.03.2013, 16:10  [ТС]     Назначение static ? #7
Это я понял. А когда в функции пишут static void Test() {} это как понимать?
Croessmah
Модератор
Эксперт CЭксперт С++
12798 / 7258 / 809
Регистрация: 27.09.2012
Сообщений: 17,921
Записей в блоге: 2
Завершенные тесты: 1
09.03.2013, 16:12     Назначение static ? #8
Цитата Сообщение от pEntity Посмотреть сообщение
Я понимаю,но вы бы не могли рассказать о статике,что нужно знать,дабы его применять?
Ограничивает область видимости глобальных переменных текущим модулем
Для функций тоже самое.
Для локальных переменных в функции - пост #4
Статические поля класса и методы.
Kins
59 / 58 / 6
Регистрация: 03.02.2013
Сообщений: 167
09.03.2013, 16:12     Назначение static ? #9
Цитата Сообщение от pEntity Посмотреть сообщение
static void Test() {} это как понимать?
с таким не сталкивался.
Croessmah
Модератор
Эксперт CЭксперт С++
12798 / 7258 / 809
Регистрация: 27.09.2012
Сообщений: 17,921
Записей в блоге: 2
Завершенные тесты: 1
09.03.2013, 16:13     Назначение static ? #10
Цитата Сообщение от pEntity Посмотреть сообщение
А когда в функции пишут static void Test() {} это как понимать?
Это значит, что область видимости функции ограничена данным модулем.
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 373
09.03.2013, 16:23  [ТС]     Назначение static ? #11
Цитата Сообщение от Croessmah Посмотреть сообщение
Это значит, что область видимости функции ограничена данным модулем.
А для чего это допустим нужно?
Croessmah
Модератор
Эксперт CЭксперт С++
12798 / 7258 / 809
Регистрация: 27.09.2012
Сообщений: 17,921
Записей в блоге: 2
Завершенные тесты: 1
09.03.2013, 16:23     Назначение static ? #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
Просмотров: 46

Размер: 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
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.03.2013, 16:26     Назначение static ? #13
Вообще, static перед чем нибудь, говорит о том, что это что-то хранится в статическтй памяти, а значит будет существовать до конца программы. Если static стоит перед тем, что и так хранится в статической памяти (глобальные переменные, функции и т.д.), то это значит, что это что-то имеет ограниченную (в отличие от того, если бы перед ним static не стоял) область видимости (текущий модуль).
Croessmah
Модератор
Эксперт CЭксперт С++
12798 / 7258 / 809
Регистрация: 27.09.2012
Сообщений: 17,921
Записей в блоге: 2
Завершенные тесты: 1
09.03.2013, 16:28     Назначение static ? #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
Просмотров: 46

Размер: 1.8 Кб
Croessmah
Модератор
Эксперт CЭксперт С++
12798 / 7258 / 809
Регистрация: 27.09.2012
Сообщений: 17,921
Записей в блоге: 2
Завершенные тесты: 1
09.03.2013, 16:30     Назначение static ? #15
Цитата Сообщение от pEntity Посмотреть сообщение
А для чего это допустим нужно?
Например, написали мы супер-пупер библиотеку, у нас есть функции, с которыми могут работать пользователи библиотеки, а есть функции, необходимые для внутренней реализации библиотеки, делаем их static и они не видны из других модулей.
Что-то на подобии private в классе.
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 373
09.03.2013, 16:34  [ТС]     Назначение static ? #16
Ага,это понятно. Спасибо большое. А как еще понять,что они не будут видны из других модулей ?
Croessmah
Модератор
Эксперт CЭксперт С++
12798 / 7258 / 809
Регистрация: 27.09.2012
Сообщений: 17,921
Записей в блоге: 2
Завершенные тесты: 1
09.03.2013, 16:42     Назначение static ? #17
Цитата Сообщение от pEntity Посмотреть сообщение
А как еще понять,что они не будут видны из других модулей ?
Посмотрите пример с функциями. В модуле main.cpp вызываются две функции из модуля 1.cpp. Функция print является внешней(external) и видна. А функция foo объявлена как static, и возникает ошибка, т.к. её не видно вне модуля.
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.03.2013, 16:47     Назначение static ? #18
Добавлю ещё насчёт инициализации статических переменных. Если явно неизициализировать статическую переменную, то компилятор установит её равной 0. Элементы статических массивов и структур устанавливаются равным 0 по умолчанию. Если статическая переменная объявлена внутри блока (например в теле функции), то она инициализируется один раз при запуске программы, а при последующих заходах в этот блок она уже не будет (в отличие от локальных переменных) больше инициализироваться.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
09.03.2013, 17:11     Назначение static ? #19
Цитата Сообщение от alsav22 Посмотреть сообщение
то она инициализируется один раз при запуске программы первом входе в блок, а при последующих заходах в этот блок она уже не будет (в отличие от локальных переменных) больше инициализироваться.
Починил.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2013, 17:45     Назначение static ?
Еще ссылки по теме:

Static Library C++
Static C++
Static переменные C++
Static class c++ C++
C++ Объяснить назначение ключевого слова static

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

Или воспользуйтесь поиском по форуму:
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.03.2013, 17:45     Назначение static ? #20
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Починил.
Тогда и у Праты почините...
Миниатюры
Назначение static ?  
Yandex
Объявления
09.03.2013, 17:45     Назначение static ?
Ответ Создать тему
Опции темы

Текущее время: 09:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru