Список инициализаторов в конструкторе

В реализации конструктора может быть задан список инициализации, который записывается после заголовка конструктора через знак :

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

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

Список инициализации обязателен:

1)если в качестве поля задаётся объект другого класса, для которого должен быть запущен конструктор;

2)для вызова конструктора предка при использовании механизма наследования.

3)для определения констант

4)при использовании ссылки список инициализации должен содержать вызовы конструкторов. При инициализации могут инициализироваться другие данные-члены

 

Class Demo{

Const int a;

Int b,c;

public:

Demo():a(0),b(1){c=2;};

};

Деструктор

Деструктор – специальный метод, который неявно вызывается при корректном уничтожении объекта. Назначение деструктора – выполнение дополнительных действий по освобождении ресурсов, захваченных при создании объекта или в процессе работы с ним.

Если деструктор не написан, вызывается деструктор по умолчанию, котоый не выполняет никаких дополнительных действий.

Деструктор должен:

1)не иметь аргументов

2)не возвращать значения

3)не наследоваться

4)не объявляться как const, volatite, static

Деструктор всегда один, и его нельзя перегрузить (не имеет аргументов). Он служит для освобождения захваченных ресурсов, т.е. он не пишется, если ресурсы освобождать не нужно. В этом случае компилятор сгенерирует деструктор по умолчанию, который выполнит следующее:

1)вызывает деструктор данных-членов класса

2)вызывает деструкторы базовых членов класса (если они существуют)

Деструктор вызвается неявно в случаях:

1)для static объектов при завершении программы

2)для локальных объектов при выходе из блока

3)при применении оператора delete к указателю на объект.

4)при раскрутке стека для обработки искючений.

void my_func(){

Point B1; Point* t1=new Point(10,-3);

Point * t2=new Point(0,16);

delete t1; //деструктор для объекта, адрес которого в t1;

return; //вызывает деструктор для локального объекта B1, время которого истекает

}

Использовние указателей при работе с классами

Указатель this. Указатели на члены класса.

Указатели на нестатические члены класса

При определении указателей на нестатические члены класса следует учитывать, как тип члена класса, так и тип самого класса. При определении таких указателей тип класса с оператором разрешения области видимости ставится перед именем указателя.

Для данных: тип_члена_класса тип_класса ::*имя_указателя(список_параметров)

Для функций: возвращаемый_тип (тип_класса ::*имя_указателя)(список_параметров)

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

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

Struct Demo

{ int count;

int Count() {return count;};

};

Int main()

{

Demo d;

Demo* dp=&d;

int Demo::*ip; //указатель на член-данные

int Demo::*fp(c) //указатель на член-функцию

ip=&Demo::Count; // инициализация

fp=Demo::Count; // -//-

Указатель this.

Определение класса вводит область видимости, которой принадлежат имена членов класса. По умолчанию, каждая не статическая функция-член класса имеет доступ к указателю this, который указывает на объект, для которого данная функция вызвана. Он хранит указатель на вызванный функцией объект. Енр явное указание целесообразно в случае, когда метод возвращает указатель или ……..

Const Point

Point::greater(const Point&c)const

{if (module()->c.module())

return *this;

return c;}

Указатели на статические члены класса

Между указателями на статические и нестатические члены класса есть разница. Синтаксис указателя на член класса не используется для обращения к статичяескому члену. Статические члены – это глобальные объекты и функции, принадлежащие классу. Указатели на них - обычные указатели. Объявление указателя на статический член класса выглядит так же, как и для указателя на объект, не являющийся членом класса. Для разыменования указателя никакой объект не требуется.

ПЕРЕГРУЗКА ОПЕРАЦИЙ