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

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

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

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

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

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


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

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

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

static const? - C++
если мне нужна константа в классе, как ее лучше объявить со static или без? разница будет только в том, что со статиком мне можно будет...

static-член - C++
Привет. Как сделать чтобы при каждом создании объекта класса, увеличивался его счетчик. вот сами классы: class Base{ public: ...

static class - C++
Хочу создать static class, в котором будет находится static переменная, чтобы она была доступна из разных классов. helper.h static...

Private: static - C++
В хедере есть клас point, клас точек, которые должны иметь нумерацию. В поле private у него есть static атрибут free_id, в который...

Опять static - C++
Есть два файла. ////////////////////////////////////// //main.cpp class SomeClass { public: SomeClass(REC*...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
09.03.2013, 16:01     Назначение static ? #2
Цитата Сообщение от pEntity Посмотреть сообщение
но так и не понимаю для чего он ?
Его назначение зависит от того, где он используется.
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 377
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
Сообщений: 377
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
Сообщений: 377
09.03.2013, 16:10  [ТС]     Назначение static ? #7
Это я понял. А когда в функции пишут static void Test() {} это как понимать?
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 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Эксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
09.03.2013, 16:13     Назначение static ? #10
Цитата Сообщение от pEntity Посмотреть сообщение
А когда в функции пишут static void Test() {} это как понимать?
Это значит, что область видимости функции ограничена данным модулем.
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 377
09.03.2013, 16:23  [ТС]     Назначение static ? #11
Цитата Сообщение от Croessmah Посмотреть сообщение
Это значит, что область видимости функции ограничена данным модулем.
А для чего это допустим нужно?
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 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
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.03.2013, 16:26     Назначение static ? #13
Вообще, static перед чем нибудь, говорит о том, что это что-то хранится в статическтй памяти, а значит будет существовать до конца программы. Если static стоит перед тем, что и так хранится в статической памяти (глобальные переменные, функции и т.д.), то это значит, что это что-то имеет ограниченную (в отличие от того, если бы перед ним static не стоял) область видимости (текущий модуль).
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 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Эксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
09.03.2013, 16:30     Назначение static ? #15
Цитата Сообщение от pEntity Посмотреть сообщение
А для чего это допустим нужно?
Например, написали мы супер-пупер библиотеку, у нас есть функции, с которыми могут работать пользователи библиотеки, а есть функции, необходимые для внутренней реализации библиотеки, делаем их static и они не видны из других модулей.
Что-то на подобии private в классе.
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 377
09.03.2013, 16:34  [ТС]     Назначение static ? #16
Ага,это понятно. Спасибо большое. А как еще понять,что они не будут видны из других модулей ?
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
09.03.2013, 16:42     Назначение static ? #17
Цитата Сообщение от pEntity Посмотреть сообщение
А как еще понять,что они не будут видны из других модулей ?
Посмотрите пример с функциями. В модуле main.cpp вызываются две функции из модуля 1.cpp. Функция print является внешней(external) и видна. А функция foo объявлена как static, и возникает ошибка, т.к. её не видно вне модуля.
alsav22
5416 / 4812 / 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 const - C++
объясните, пожалуйста, вот такую странную конструкцию (накопал в старой проге): после #include идет следующее: static const char...

static и const - C++
static void A(); Что дает этот статик? Что он вообще дает? int A() const; Что дает конст в данном случае? static int...

Static class c++ - C++
Можно ли сделать класс чисто статическим? То есть не прописывать отдельно для каждой переменой, функции static, а одним разом всех ? ...

Static переменные - C++
Написал небольшую программу, подключил к проекту name.h файл. В нем описание переменных static int a, b; Почему их значения можно...

Static string - C++
Здраствуйте, у меня задание написать клас, и в нем есть строка с приставкой static (static string name_univer). Для нее нужно написать...


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

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

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