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

Статические поля и методы - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
igormalanyk
1 / 1 / 0
Регистрация: 10.04.2013
Сообщений: 33
18.04.2013, 21:58     Статические поля и методы #1
Ни как не могу понят что же такое статические поля и методы, и какое их принципиальное отличие от простых методов полей.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2013, 21:58     Статические поля и методы
Посмотрите здесь:

C++ Статические поля класса
Статические методы (сложение полиномов) C++
Статические поля и наследование C++
C++ Статические поля класса
Статические поля и unresolved символы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11819 / 6798 / 769
Регистрация: 27.09.2012
Сообщений: 16,876
Записей в блоге: 2
Завершенные тесты: 1
18.04.2013, 22:16     Статические поля и методы #2
Цитата Сообщение от igormalanyk Посмотреть сообщение
и какое их принципиальное отличие от простых методов полей.
Они общие для всех объектов класса, для их использование не нужен объект класса. Это что-то вроде обычных переменных и функций в пространстве имен класса
Silvestr1994
 Аватар для Silvestr1994
27 / 27 / 1
Регистрация: 26.10.2012
Сообщений: 101
18.04.2013, 22:24     Статические поля и методы #3
C++
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
// statdata.cpp
// static class data
#include <iostream>
using namespace std;
////////////////////////////////////////////////////////////////
class foo
   {
   private:
      static int count;   //only one data item for all objects
                          //note: *declaration* only!
   public:
      foo()               //increments count when object created
         { count++; }
      int getcount()      //returns count
         { return count; }
   };
//--------------------------------------------------------------
int foo::count = 0;       //*definition* of count
////////////////////////////////////////////////////////////////
int main()
   {
   foo f1, f2, f3;        //create three objects
 
   cout << "count is " << f1.getcount() << endl;  //each object
   cout << "count is " << f2.getcount() << endl;  //sees the
   cout << "count is " << f3.getcount() << endl;  //same value
   return 0;
   }
Если переменная объявлена как static,то компилятор выделяет ей как и глобальной переменной постоянное место в памяти.Значение этой переменной сохраняется между вызовами блоков программы,в которых она объявлена(нестатические локальные переменные между вызовами ф-ций уничтожаются).
Отличие от глобальной в том,что она доступна только в своём блоке кода(ф-ции или файле).
Применяется,например,при вызовах COLLBACK ф-ций ,которые вызываются при поступлении в приложение сообщений.При этом значения переменных объявленных static,сохраняются.Все другие переменные необходимо заново инициализировать.
Если объявить переменную-член класса как статическую,то компилятор создаст для всех объектов один щбщий экземпляр этой переменной.Эта переменная не будет копироваться для всх объектов данного класса,как это происходит для нестатических членов.
C++
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
42
43
44
45
46
47
48
// statfunc.cpp
// static functions and ID numbers for objects
#include <iostream>
using namespace std;
////////////////////////////////////////////////////////////////
class gamma
   {
   private:
      static int total;        //total objects of this class
                               //   (declaration only)
      int id;                  //ID number of this object
   public:
      gamma()                  //no-argument constructor
         {
         total++;              //add another object
         id = total;           //id equals current total
         }
      ~gamma()                 //destructor
         {
         total--;
         cout << "Destroying ID number " << id  << endl;
         }
      static void showtotal()  //static function
         {
         cout << "Total is " << total << endl;
         }
      void showid()            //non-static function
         {
         cout << "ID number is " << id << endl;
         }
   };
//--------------------------------------------------------------
int gamma::total = 0;          //definition of total
////////////////////////////////////////////////////////////////
int main()
   {
   gamma g1;
   gamma::showtotal();
 
   gamma g2, g3;
   gamma::showtotal();
 
   g1.showid();
   g2.showid();
   g3.showid();
   cout << "----------end of program----------\n";
   return 0;
   }
- это статическая функция
igormalanyk
1 / 1 / 0
Регистрация: 10.04.2013
Сообщений: 33
18.04.2013, 23:02  [ТС]     Статические поля и методы #4
А если в Билдере мне надо посчитать количество объектов, то где мне присвоить нулевое значение счетчику(статик).
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11819 / 6798 / 769
Регистрация: 27.09.2012
Сообщений: 16,876
Записей в блоге: 2
Завершенные тесты: 1
18.04.2013, 23:04     Статические поля и методы #5
Цитата Сообщение от igormalanyk Посмотреть сообщение
то где мне присвоить нулевое значение счетчику(статик).
в cpp файле при определении переменной
C++
1
size_t MyClass::ObjCount=0;
Yandex
Объявления
18.04.2013, 23:04     Статические поля и методы
Ответ Создать тему
Опции темы

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