Список инициализаторов в конструкторе
В реализации конструктора может быть задан список инициализации, который записывается после заголовка конструктора через знак :
Элементы списка разделяются запятыми. Каждый элемент списка содержит имя поля и способ его инициализации в круглых скобках. Для обычных полей использувание списка инициализации допустимо, но не обязательно.
Конструктор обычно выполняет инициализацию элементов данных объектов, но если инициализация в теле конструктора невозможна, то используется список инициализации.
Список инициализации обязателен:
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;}
Указатели на статические члены класса
Между указателями на статические и нестатические члены класса есть разница. Синтаксис указателя на член класса не используется для обращения к статичяескому члену. Статические члены – это глобальные объекты и функции, принадлежащие классу. Указатели на них - обычные указатели. Объявление указателя на статический член класса выглядит так же, как и для указателя на объект, не являющийся членом класса. Для разыменования указателя никакой объект не требуется.
ПЕРЕГРУЗКА ОПЕРАЦИЙ