Программирование >>  Структурное программирование 

1 ... 144 145 146 [ 147 ] 148 149 150 ... 342


Рис. 6.9. Демонстрация последовательноаи, в которой вызываются конструктор и деструктор

(часть 1 из 4)

чинает выполняться. Соответствующие деструкторы вызываются, когда завершается main или когда вызывается функция exit (смотри главу 18, Другие темы ).

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

Конструкторы статических локальных объектов вызываются сразу же, как только процесс выполнения достигает места, где объекты были впервые объявлены. Соответствующие деструкторы вызываются, когда завершается main или когда вызывается функция exit.

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

Функция main объявляет три объекта. Объекты second и fourth являются локальными автоматическими объектами, а объект third - статическим локальным объектом. Конструкторы каждого из этих объектов вызываются, когда процесс выполнения достигает места, где объекты были объявлены. Деструкторы объектов fourth и second вызываются в соответствующем порядке, когда заканчивается main. Поскольку объект third - статический, он существует до завершения программы. Деструктор объекта third вызывается раньше деструктора для first, но после уничтожения всех других объектов.

Функция creat объявляет три объекта - локальные автоматические объекты fifth и seventh и статический локальный объект sixth. Деструкторы для объектов seventh и fifth вызываются в соответствующем порядке по окончании creat. Поскольку sixth - статический объект, он существует до завершения программы. Деструктор для sixth вызывается раньше деструктора для third и first , но после уничтожения всех других объектов.

CREATE.Н

Определение класса CreatAndDestroy. Щ Функции-элементы определены в CREATE.СРР.

I #ifndef CREATE H I #define CREATE H

class CreateAndDestroy { public:

CreateAndDestroy(int); конструктор

-CreateAndDestroy0; деструктор

private:

int data;

#endif



Рис. 6.9. Демонарация последовательноаи, в которой вызываются конаруктор и деаруктор

(чааь 3 из 4)

CREATE.СРР

Определения функций-элементов для класса CreateAndDestroy tinclude <iostream.h> tinclude create.h

CreateAndDestroy::CreateAndDestroy(int value) {

data = value;

cout Объект data конструктор ;

CreateAndDestroy::~CreateAndDestroy()

{ cout Объект data деструктор endl; }

Рис. 6.9. Демонстрация последовательноаи, в которой вызываются конаруктор и деаруктор

(чааь 2 из 4)

FIG6 9.CPP

Демонстрация последовательности, в которой вызываются конструкторы и деструкторы, tinclude <iostream.h> tinclude create.срр

void create(void); прототип

CreateAndDestroy first(1); глобальный объект

main ( ) {

cout (глобальный созданный до main) endl;

CreateAndDestroy second(2); локальный объект

cout (локальный автоматический в main) endl;

static CreateAndDestroy third(3); локальный объект

cout (локальный статический в main) endl; create(); вызов функции создания объектов

CreateAndDestroy fourth(4); локальный объект

cout (локальный автоматический в main) endl; return 0; }

Функция создания объектов void create(void)

CreateAndDestroy fifth(5);

cout (локальный автоматический в create) << endl; static CreateAndDestroy sixth(6);

cout (локальный статический в create) << endl; CreateAndDestroy seventh(7);

cout (локальный автоматический в create) endl;



6.14. Использование данных-элементов и функций-элементов

Закрытые данные-элементы можно изменять только с помощью функций-элементов (и дружественных функций) класса. Типичным изменением могла бы быть корректировка баланса клиентов банка (например, закрытого элемента данных класса BankAccount) с помощью функции-элемента computelnterest.

Классы часто предусматривают открытые функции-элементы, позволяющие клиентам класса устанавливать (т.е. записывать) или получать (т.е. читать) значения закрытых данных-элементов. Эти функции можно не называть конкретно set или get , но все же часто применяют именно эти названия. Более точно, функция-элемент, которая устанавливает элемент данных in-terestRate, должна была бы называться setlnterestRate, а функция-элемент, которая читает элемент данных interestRate, должна была бы называться getlnterestRate. Читающие функции обычно называют также функциями запросов .

Казалось бы, что предоставление возможностей как установки, так и чтения, по существу, то же самое, что задание открытых данных-элементов. Однако в С++ существует одна тонкость, которая делает этот язык таким привлекательным для создания программного обеспечения. Если данные-элементы открытые, то они могут быть прочитаны или записаны по желанию с помощью любой функции в программе. Если данные-элементы закрытые, то открытая функция get , позволяет другим функциям читать при желании эти данные, причем функция get управляет форматированием и отображением данных. Открытая функция set может, а более точно - должна тщательно анализировать любую попытку изменить значение закрытого элемента данных. Это должно обеспечивать гарантию, что новое значение соответствует этому элементу данных. Например, должны быть отвергнуты попытки установить день месяца, равный 37, отрицательный вес человека, численную величину символьного значения, значение оценки, равное 185, при шкале оценок от О до 100 и т.д.

ff Объект 1 конструктор (глобальный созданный до main)

Объект 2 конструктор (локальный автоматический в main) Объект 3 конструктор (локальный статический в main) Объект 5 конструктор (локёшьный гштоматический в create) ЩА Объект 6 конструктор (локальный статический в create)

Объект 7 конструктор (локгихьный автоматический в create) Объект 7 деструктор Объект 5 деструктор

Объект 4 конструктор (локальный автоматический в main)

Объект 4 деструктор Объект 2 деструктор . Объект 6 деструктор

Объект 3 деструктор

Объект 1 деструктор

Рис. 6.9. Демонстрация последовательности, в которой вызываются конструктор и деструктор

(часть 4 из 4)



1 ... 144 145 146 [ 147 ] 148 149 150 ... 342

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика