Поделиться через


Статические члены данных (C++)

Классы могут содержать данные и функции-члены статического элемента.Если элемент данных объявлен как Статическийтолько одна копия данных ведена для всех объектов класса.(Дополнительные сведения см. в разделе Статические функции-члены.)

Статические члены данных не является частью объектов данного типа класса. они отдельные объекты.В результате объявление статического члена данных не является определением.Элемент данных объявлен в области класса, но определение выполняется в области файла.Эти статические элементы имеют внешний переключателя.Это показано в приведенном ниже примере.

// static_data_members.cpp
class BufferedOutput
{
public:
   // Return number of bytes written by any object of this class.
   short BytesWritten()
   {
      return bytecount;
   }

   // Reset the counter.
   static void ResetCount()
   {
      bytecount = 0;
   }

   // Static member declaration.
   static long bytecount;
};

// Define bytecount in file scope.
long BufferedOutput::bytecount;

int main()
{
}

В приведенном выше коде, элемент bytecount объявляется в классе BufferedOutputдолжны быть указаны только их вне объявления класса.

Статические члены данных может ссылаться на без ссылки на объект типа класса.Число байтов, записанных использование BufferedOutput объекты можно получить следующим образом:

long nBytes = BufferedOutput::bytecount;

Для статического члена, которые должны существовать не требуется, что все объекты типа класса.Статические члены можно также получить доступ с помощью участник-выделение (. и **- >**операторы.)Примеры.

BufferedOutput Console;

long nBytes = Console.bytecount;

В предыдущем случае ссылка на объект (Consoleне вычисляет); возвращаемое значение из статического объекта bytecount.

Статические члены данных применяются правила доступа члена класса, поэтому закрытый доступ к статическим элементам данных разрешен только для функций и friends члена класса.Эти правила описанных в Управление доступом к членам.Исключение, что статические члены данных должны быть определены в области файла, независимо от их ограничений доступа.Если элемент данных быть явно инициализированным, инициализатор должна быть предоставлена с определением.

Тип статического элемента не уточняется по имени класса.Таким образом, тип BufferedOutput::bytecount существует long.

См. также

Ссылки

Классы, структуры и объединения