Области доступности элементов класса
Данные-члены (поля) – набор взаимосвязанной информации, возможно различных типов, объединённых в один объект.
Данные-члены могут:
1) находиться в public, private, protected частях класса.
2) могут иметь статический класс памяти (static). Такие поля определяются в единственном экземпляре для всего класса, а не для каждого его объекта.
3) могут быть объявлены как const. Константные данные должны быть инициализированы в каждом определении конструктора. Имена полей, и начальные значения заключаются в скобки, отделяются от списка аргументов конструктора двоеточием.
4) могут быть переменными другого класса.
Инициализация полей при описании не допускается.
Классы
Могут быть глобальными (объявленными вне любого блока) и локальными (объявленными внутри блока – функции или другого класса)
Локальные классы
1) не могут иметь статических элементов;
2) методы этих классов могут быть описаны только внутри класса;
Внутри него можно использовать типы, статические и внешние переменные, внешние функции и элементы перечислений из области, в которой он описан, запрещается использовать автоматические переменные из этой области.
24.5. Функции-члены (методы класса) – функции, которые манипулируют данными-членами класса.
Функции-члены:
1)Имеют доступ ко всем полям своего класса.
2)могут быть в public, protected, private части класса.
3)могут быть определены внутри или вне объявления класса.
4)могут обращаться к полям или методам, объявленным после них.
5)имеют неявно объявленную переменную (указатель) this (он неявно используется внутри метода для ссылок на элементы объекта. Его явное указание целесообразно в случае, когда метод возвращает указатель или ссылку на вызвавший его объект, или имеется конфликт имен (когда имя поля класса совпадает с именем формального параметра метода)).
6)могут быть static.
7)могут быть объявлены как const (но не могут быть статическими)
8)могут быть виртуальными (но не могут быть статическими)
Статические и нестатические члены класса.
Статические элементы класса
С помощью модификатора static можно описать статические поля и методы класса. Их можно рассматривать как глобальные переменные или функции, доступные только в пределах области класса.
Нестатические же члены класса объявляются лишь как указатели или ссылки на объект своего класса.
Статические методы
Статические методы предназначены для обращения к статическим полям класса. Могут обращаться непосредственно только к статическим полям и вызывать только другие статические методы класса, потому что им не передается скрытый указатель this.
Эти методы не могут быть константными и виртуальными.
Использование статического метода
class A {
private:
Static int count;
Public
static void inccount(){count++};
};
…
A::int count;
void f(){
A a;
//a.count++;//так нельзя!!!!
a.inccount; //так можно
Константные и статические поля.
Статические поля
Поля класса могут быть объявлены как статические. Объявление поля с атрибутом static не является его определением – это поле (с помощью оператора расширения области видимости) должно быть определено дополнительно, и при этом можно задать начальное значение этого поля. Статическое поле может быть изменено либо с помощью статических методов, либо с помощью механизма инициализаторов (по крайней мере в системе программирования Microsoft Visual Studio).
Константные поля
Поля класса могут быть описаны как константные. Значение константного поля для вновь создаваемого объекта может быть задано в момент работы конструктора и в дальнейшем не может быть изменено. Занесение значений константных полей выполняется через механизм инициализаторов, например:
class MyClass {
Const int ID;
…
public:
MyClass(aID) : ID(aID) { … }
Обратите внимание, что следующая строка неверна, т.к. в ней не используются инициализаторы:
MyClass(aID) {ID = aID; … }
Константные методы.
Константный объект
Значения полей такого объекта изменять запрещается. К нему применяются только константные методы.
Константный метод
1)объявляется с ключевым словом const после списка параметров;
2)не может изменять значения полей класса;
3)может вызывать только константные методы;
4)может вызываться для любых (не только константных методов).
Преимущество константного метода: дополнительный контроль компилятора в функциях, в которых объект передаётся по константной ссылке.