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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 132, средняя оценка - 4.69
Nikolas9
0 / 0 / 0
Регистрация: 29.12.2011
Сообщений: 7
#1

Статическая переменная - C++

27.06.2012, 15:56. Просмотров 18014. Ответов 8
Метки нет (Все метки)

Добрый день!
Объясните пожалуйста, что такое статическая переменная, в каких случаях лучше использовать именно её и чем она вообще хороша?
Спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.06.2012, 15:56     Статическая переменная
Посмотрите здесь:

Статическая переменная в шаблоне - C++
// // (---.Array_hpp---) // #ifndef Array_HPP // Preprocessor gates #define Array_HPP #include...

Статическая локальная переменная - C++
Помогите пожалуйста привести пример использования статической локальной переменной в функции

Статическая переменная в классе - C++
Нужно вывести на экран порядковый номер объекта, используя статическую переменную для подсчета общего количества объектов #include...

Статическая переменная в методе класса - C++
Локальные статические переменные сохраняют свое значение между вызовами функций. Если сделать тоже самое с методом класса, то этот статик...

Статическая переменная возвращает непонятные шестизначные числа - C++
Здравствуйте, обитатели этого форума. Кому не лень помогите разобраться со статической переменной number_of_left_seats. Почему она не...

Статическая библиотека - C++
Добрый день. Подскажите, плз, описание статической библиотеки ее структуры. и утилиту которой можно проконтролировать...

Статическая линковка - C++
Добрый вечер. Прочитал что бы екзешка запускалась на любом компьютере нужно сделать статическую линковку. То есть прикрепить к екзешнику...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gore-lykovoe
32 / 32 / 1
Регистрация: 04.04.2010
Сообщений: 414
27.06.2012, 16:10     Статическая переменная #2
Используется в классах. Если ты в классе объявешь переменную, то она будет своя у каждого объекта. А если ты объявешь статическую переменную, то она будет общей для всех объектов. Т.е. например ее можно будет использовать как счетчик.
DiffEreD
1429 / 766 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
27.06.2012, 16:11     Статическая переменная #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Статические переменные объявляются директивой static. Они инициализируются только один раз - при первом вызове функции и сохраняют свое значение даже после выхода из функции. В следующий раз при новом вызове функции статические переменные будут иметь то же значение, которое они имели перед выходом из функции в послений раз.

Статические переменные объявляются в пределах описания функции и поэтому доступны для использования только в пределах той функции, в которой они объявлены.
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
27.06.2012, 16:11     Статическая переменная #4
Еще бывают глобальные статические переменные и локальные статические переменные внутри функции. Все 3 варианта разные.
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
27.06.2012, 16:13     Статическая переменная #5
Переменные типа static - это переменные так называемого долговременного хранения то есть она хранит свои значения в пределах своей функции или файла.

Статические переменные бывают локальные и глобальные.

Статические локальные переменные используются в тех случаях, когда необходимо сохранить значение переменной в памяти после того как выполнение функции будет завершено, то есть между вызовами функции.
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
27.06.2012, 16:15     Статическая переменная #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
static int n = 200; // глобальная статическая переменная, она будет разная во всех модулях.
 
class Class
{
public:
   static int m_stat; // статическая переменная класса, общая для всех объектов класса
   int getRef()
   {
       static int ref = 0; //статическая переменная функции, сохраняет свое значение.
       return ref++;
   }
}
 
int Class::m_stat; // статические переменные класса обязательно определять
Nikolas9
0 / 0 / 0
Регистрация: 29.12.2011
Сообщений: 7
27.06.2012, 16:40  [ТС]     Статическая переменная #7
gooseim, а в этом примере кода она какая?для функции data:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
QVariant MyModel_2::data(const QModelIndex &index, int role) const
{
   static int i = -1;
   static int j = 0;
   static int fl = 0;
   if (!index.isValid() || !Parent->records->count()) return QVariant();
   if (role==Qt::DisplayRole || role==Qt::EditRole)
   {
       if(fl == 0)
       {
           i++;
           if(i > Parent->records->size()-2)
           {
 
               i = 0;
               j++;
               if(j > Parent->records->at(0).size()-1)
               {
                    j = 0;
                    fl = 1;
               }
           }
       }
       else
       {
           j++;
           if(j > Parent->records->at(0).size()-3)
           {
               j = 0;
               i++;
               if(i > Parent->records->size()-2)
               {
                    i = 0;
               }
           }
       };
       QStringList record = Parent->records->at(Parent->mass[i]);
       return record.at(index.column());
   }
   return QVariant();
}
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
27.06.2012, 16:47     Статическая переменная #8
Цитата Сообщение от Nikolas9 Посмотреть сообщение
а в этом примере кода она какая?для функции data
статическая переменная функции - сохраняет свое значение после выхода из функции
C++
1
2
3
4
5
6
7
8
9
10
11
void foo()
{
    static int i = 0;
    std::cout << i++ << '\n';
}
 
int  main()
{
    for (int i = 0; i < 4; ++i)
       foo();
}
output:
0
1
2
3
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2012, 16:55     Статическая переменная
Еще ссылки по теме:

Статическая линковка - C++
Появилась необходимость прилинковать статическую библиотеку (GLFW) к проекту на C++. Я подключил заголовки, а вот саму библиотеку...

Статическая память - C++
Если я на этапе компиляции выделил слишком много памяти. Например зарезервировал память под огромный массив.Но в системе нет столько памяти...

Статическая библиотека - C++
lib main.h namespace x { int __stdcall WindowCreate( ... ); } main.cpp

Статическая линковка boost - C++
Hi all! Захотелось побаловаться бустом, и столкнулся с проблемой, что в пакете boost-libs отсутствуют *.а файлы. Сначала я хотел...

Статическая линковка MinGW - C++
Как задать статическую линковку для MinGW в среде Qt Creator? Прописал в pro- файле:, но не помогло.


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

Или воспользуйтесь поиском по форуму:
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
27.06.2012, 16:55     Статическая переменная #9
Nikolas9, такая же как у меня в getRef
Yandex
Объявления
27.06.2012, 16:55     Статическая переменная
Ответ Создать тему
Опции темы

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