Язык С++ и программирование на нем. Рейзлин В.И. - 84 стр.

UptoLike

Составители: 

86
string1.write ( );
string2.write ( );
string3.write ( );
}
В случае вызова первого конструктора без аргументов ини-
циализация любого объекта будет происходить всегда совершенно оди-
наково, теми значениями, которые жестко определенны в этом конст-
рукторе.
данном случае объект string1 инициализирован конструктором
без аргументов и при вызове функции string.write( ) произойдет печать
строки Здравствуйте! желтого цвета на синем фоне в 15-й строке на-
чиная с 36-й позиции.)
Объекты string2 и string3 инициализируются другим конструк-
тором.
Как и для других переопределяемых функций, выбор требуемого
конструктора осуществляется по числу и по типу аргументов.
Отметим, что в классе может быть только один конструктор с
умалчиваемыми значениями параметров.
18.3. Деструкторы
Важную роль наряду с инициализацией объектов абстрактных ти-
пов имеет и обратная к ней операция удаление таких объектов. В ча-
стности, конструкторы многих классов выделяют память под объекты
динамически, и после того, как необходимость в таких объектах отпада-
ет, их рекомендуется удалить.
Это удобно выполнить в деструкторе функции, которая вызы-
вается для объекта абстрактного типа, когда он выходит из области су-
ществования. В рассмотренном выше примере место для хранения строк
в памяти выделяется динамически, поэтому полезно определить дест-
руктор. Имя деструктора, как и конструктора, не может быть произ-
вольным, оно образуется символом ~ и именем класса (дополнение к
конструктору):
class string { . . .
public:
~ string ( ) { delete str; }
. . .
};
Здесь деструктор очень прост. Он может быть сложнее, и оформ-
лен в виде аутлайн-функции. Деструктор никогда не может иметь аргу-