348__________ Часть II. Программирование на C++
где последнее слово destructor отразит тот факт, что деструктор статического объекта был вызван последним, при выходе объекта из области видимости — в той точке, где расположена закрывающая скобка функции main.
Операция присваивания
Задача операции присваивания для класса состоит в том, чтобы дать вам возможность сделать один существующий объект эквивалентным другому. Сама операция представляет из себя знак равенства (=). Присваивание настолько важно, что если вы сами. не реализуете его, компилятор сделает это за вас. '
Вспомните: выше в этой главе говорилось о том, что для каждого создаваемого класса вы должны принимать во внимание конструктор по умолчанию, конструктор копий, операцию присваивания • и деструктор. Иногда имеет смысл воспользоваться предопределенными конструктором копий и операцией присваивания — то есть теми их версиями, которые автоматически генерируются компилятором.
К сожалению, это удается не всегда. Возможны ситуации, когда инициализация или копирование объектов из других объектов недопустимы; для указания этого существуют специальные способы (обратитесь к главе 17 "Конструкторы: копирование и присваивание"). Пока что, до выяснения подробностей, мы воздержимся от рассмотрения примеров неправильного применения функций копирования и присваивания.
Указатель на самого себя: this
У каждого объекта есть физическое местоположение. Оперировать с этими местоположениями можно посредством указателей. Как правило, в указателях хранятся адреса. Обращаясь к указателю, мы в действительности обращаемся к объекту, расположенному по содержащемуся в этом указателе адресу.
Каждый объект класса имеет свой физический адрес; его можно извлечь из указателя this. Внутренний указатель this есть у каждого класса. На самом деле мы всегда неявно используем указатель this, когда обращаемся к членам внутри области видимости функции-члена класса. Вот пример:
class THIS_DEMO
{
public:
THIS_DEMO()( this->a = 5; } private:
int a;
};