Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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


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

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

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

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

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

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

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

20
Croessmah
Ушел
13783 / 8033 / 928
Регистрация: 27.09.2012
Сообщений: 19,804
Записей в блоге: 3
Завершенные тесты: 1
09.03.2013, 16:01 #2
Цитата Сообщение от pEntity Посмотреть сообщение
но так и не понимаю для чего он ?
Его назначение зависит от того, где он используется.
1
pEntity
51 / 46 / 5
Регистрация: 12.12.2012
Сообщений: 820
09.03.2013, 16:04  [ТС] #3
Я понимаю,но вы бы не могли рассказать о статике,что нужно знать,дабы его применять?
0
Kins
59 / 58 / 6
Регистрация: 03.02.2013
Сообщений: 167
09.03.2013, 16:05 #4
статические переменные (static int a; ) объявляются в теле функции и остаются в памяти после окончания жизни функции, тоесть их можно исппользовать при многократном вызове функции, например для счетчика вызовов.
своими словами=)
про статические функции не слышал.
1
pEntity
51 / 46 / 5
Регистрация: 12.12.2012
Сообщений: 820
09.03.2013, 16:07  [ТС] #5
Я и без статика смогу использовать переменную при многократном вызове функции
0
Kins
59 / 58 / 6
Регистрация: 03.02.2013
Сообщений: 167
09.03.2013, 16:08 #6
Цитата Сообщение от pEntity Посмотреть сообщение
Я и без статика смогу использовать переменную при многократном вызове функции
Это если вы ее глобальной объявите. Тоесть до объявления самой функции, в которой она будет использована.
1
pEntity
51 / 46 / 5
Регистрация: 12.12.2012
Сообщений: 820
09.03.2013, 16:10  [ТС] #7
Это я понял. А когда в функции пишут static void Test() {} это как понимать?
0
Croessmah
Ушел
13783 / 8033 / 928
Регистрация: 27.09.2012
Сообщений: 19,804
Записей в блоге: 3
Завершенные тесты: 1
09.03.2013, 16:12 #8
Цитата Сообщение от pEntity Посмотреть сообщение
Я понимаю,но вы бы не могли рассказать о статике,что нужно знать,дабы его применять?
Ограничивает область видимости глобальных переменных текущим модулем
Для функций тоже самое.
Для локальных переменных в функции - пост #4
Статические поля класса и методы.
1
Kins
59 / 58 / 6
Регистрация: 03.02.2013
Сообщений: 167
09.03.2013, 16:12 #9
Цитата Сообщение от pEntity Посмотреть сообщение
static void Test() {} это как понимать?
с таким не сталкивался.
0
Croessmah
Ушел
13783 / 8033 / 928
Регистрация: 27.09.2012
Сообщений: 19,804
Записей в блоге: 3
Завершенные тесты: 1
09.03.2013, 16:13 #10
Цитата Сообщение от pEntity Посмотреть сообщение
А когда в функции пишут static void Test() {} это как понимать?
Это значит, что область видимости функции ограничена данным модулем.
1
pEntity
51 / 46 / 5
Регистрация: 12.12.2012
Сообщений: 820
09.03.2013, 16:23  [ТС] #11
Цитата Сообщение от Croessmah Посмотреть сообщение
Это значит, что область видимости функции ограничена данным модулем.
А для чего это допустим нужно?
0
Croessmah
Ушел
13783 / 8033 / 928
Регистрация: 27.09.2012
Сообщений: 19,804
Записей в блоге: 3
Завершенные тесты: 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
Просмотров: 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
1
alsav22
5437 / 4832 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.03.2013, 16:26 #13
Вообще, static перед чем нибудь, говорит о том, что это что-то хранится в статическтй памяти, а значит будет существовать до конца программы. Если static стоит перед тем, что и так хранится в статической памяти (глобальные переменные, функции и т.д.), то это значит, что это что-то имеет ограниченную (в отличие от того, если бы перед ним static не стоял) область видимости (текущий модуль).
1
Croessmah
Ушел
13783 / 8033 / 928
Регистрация: 27.09.2012
Сообщений: 19,804
Записей в блоге: 3
Завершенные тесты: 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
Просмотров: 46

Размер: 1.8 Кб
0
Croessmah
Ушел
13783 / 8033 / 928
Регистрация: 27.09.2012
Сообщений: 19,804
Записей в блоге: 3
Завершенные тесты: 1
09.03.2013, 16:30 #15
Цитата Сообщение от pEntity Посмотреть сообщение
А для чего это допустим нужно?
Например, написали мы супер-пупер библиотеку, у нас есть функции, с которыми могут работать пользователи библиотеки, а есть функции, необходимые для внутренней реализации библиотеки, делаем их static и они не видны из других модулей.
Что-то на подобии private в классе.
1
09.03.2013, 16:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2013, 16:30
Привет! Вот еще темы с ответами:

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

Static Library - C++
Привет всем! Нужно проанализировать (понять, что она делает) статичную библиотеку, собранную под Linux (.a), используя Windows. Как это...

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

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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