Члены класса
Классы могут иметь следующие типы элементов.
Классы, которые содержат классы, структуры и объединения. (См. Объявления вложенного класса и Объединения).
-
Примечание
Дружественные объекты включены в этот список, поскольку они содержатся в объявлении класса.Однако они не являются истинными членами класса, поскольку они не находятся в области класса.
Заметки
Список членов класса можно разделить на разделы 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++.