Главная->Інформатика та програмування->Содержание->Пример использования статических полей класса

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 6) онлайн

Пример использования статических полей класса

Следующий пример, STATDATA, иллюстрирует простое применение статического поля класса:

// statdata.cpp

// статические данные класса

#include <iostream>

using namespace std;

//////////////////////////////////////////////////////////

class foo

{

  private:

    static int count;        // общее поле для всех объектов

                             // (в смысле "объявления")

  public:

    foo()                    // инкрементирование при создании объекта

      { count++; }

    int getcount()           // возвращает значение count

      { return count; }

};

//--------------------------------------------------------

int foo::count = 0;          // *определение* count

//////////////////////////////////////////////////////////

int main()

{

  foo f1, f2, f3;            // создание трех объектов

  // каждый объект видит одно и то же значение

  cout << "Число объектов: " << f1.getcount() << endl;

  cout << "Число объектов: " << f2.getcount() << endl;

  cout << "Число объектов: " << f3.getcount() << endl;

  return 0;

}

В этом примере класс foo содержит единственное поле count, имеющее тип static int. Конструктор класса инкрементирует значение поля count. В функции main() мы определяем три объекта класса foo. Поскольку конструктор в этом случае вызывается трижды, инкрементирование поля count также происходит трижды. Метод getcount() возвращает значение count. Мы вызываем этот метод для каждого из объектов, и во всех случаях он возвращает одну и ту же величину:

Число объектов: 3 Число объектов: 3 Число объектов: 3

Если бы мы использовали не статическое, а автоматическое поле count, то конструктор увеличивал бы на единицу значение этого поля для каждого объек- та, и результат работы программы выглядел бы следующим образом:

Число объектов: 1 Число объектов: 1 Число объектов: 1

Статические поля класса применяются гораздо реже, чем автоматические, однако существует немало ситуаций, где их использование удобно. Сравнение статических и автоматических полей класса проиллюстрировано на рис. 6.9.

 

24