Области доступности элементов класса

Данные-члены (поля) – набор взаимосвязанной информации, возможно различных типов, объединённых в один объект.

Данные-члены могут:

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)может вызываться для любых (не только константных методов).

Преимущество константного метода: дополнительный контроль компилятора в функциях, в которых объект передаётся по константной ссылке.