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