Члены класса

Классы могут иметь следующие типы элементов.

Заметки

Список членов класса можно разделить на разделы private, protected и public с помощью ключевых слов, известных как описатели доступа. Двоеточие : должно следовать за описателем доступа. Эти разделы не обязательно должны быть непрерывными, то есть любое из этих ключевых слов может отображаться в списке элементов несколько раз. Ключевое слово назначает доступ всех членов до следующего описателя доступа или закрывающей фигурной скобки.

Объявления членов в списке разделяются точками с запятой ;. См. раздел Синтаксис объявления членов класса.

Список членов составляется со следующими целями.

  • Объявить полный набор элементов для данного класса.

  • Задать доступ (открытый, закрытый или защищенный), связанный с разными членами класса.

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

Деклараторы элементов не могут содержать инициализаторы. Указание инициализатора создает сообщение об ошибке, как показано в следующем коде.

// class_members1.cpp
// C2864 expected
class CantInit
{
public:
    long l = 7;       // Error: attempt to initialize
                      //  class member.
    static int i = 9; // Error: must be defined and initialized
                      // outside of class declaration.
};
int main()
{
}

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

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

// class_members2.cpp
class CanInit
{
public:
    CanInit() { l = 7; } // Initializes l when new objects of type 
                         //  CanInit are created.
    long       l;
    static int i;
    static int j;
};

// i is defined at file scope and initialized to 15.
// The initializer is evaluated in the scope of CanInit.
int CanInit::i = 15;                                                       

// The right side of the initializer is in the scope 
// of the object being initialized
int CanInit::j = i;  

int main()
{
}

Примечание

Имя класса, CanInit, должно предшествовать i, чтобы указать, что i определяется как член класса CanInit.

Блок, относящийся только к системам Microsoft

Microsoft C++ позволяет выполнять инициализацию данных-членов (константных целочисленных и константных перечисляющих) в определении класса. См. раздел Расширения Microsoft в C и C++.

См. также

Ссылки

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