История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...
Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...
Топ:
Основы обеспечения единства измерений: Обеспечение единства измерений - деятельность метрологических служб, направленная на достижение...
История развития методов оптимизации: теорема Куна-Таккера, метод Лагранжа, роль выпуклости в оптимизации...
Интересное:
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Финансовый рынок и его значение в управлении денежными потоками на современном этапе: любому предприятию для расширения производства и увеличения прибыли нужны...
Что нужно делать при лейкемии: Прежде всего, необходимо выяснить, не страдаете ли вы каким-либо душевным недугом...
Дисциплины:
|
из
5.00
|
Заказать работу |
Содержание книги
Поиск на нашем сайте
|
|
|
|
Объекты классов с конструкторами могут быть инициализированы следующими способами.
Первый – при помощи задаваемого в круглых скобках списка выражений, который используется как список передаваемых конструктору аргументов.
Второй – использование знака присваивания (=), за которым следует отдельное значение. Оно может иметь тип первого аргумента, принимаемого конструктором данного класса, в этом случае дополнительных аргументов либо не существует, либо они имеют значения по умолчанию. В этом случае для создания объекта вызывается соответствующий конструктор. Значение может также являться объектом данного типа класса. В таком случае вызывается конструктор копирования, инициализирующий объект.
Пример 11.
Демонстрация работы конструктора и деструктора в программе.
#include<iostream.h>
#include<conio.h>
class Number // описание класса
{ int i; // элемент private
public: // прототипы методов класса
Number (int j); // объявление конструктора
~Number(); // объявление деструктора
void show(); // вывод на экран
};
Number:: Number (int i) // заголовок конструктора
{ i=j; // инициализация элемента данных класса
cout<<"Работает конструктор: i="<< i <<'\n';
}
Number:: ~Number() // заголовок деструктора
{ cout<<"Работает деструктор: i="<< i <<'\n';
}
void Number:: show() // метод вывода данных на экран
{ cout<<"i= "<< i <<'\n';
}
void main() // главная функция
{ clrscr(); // чистка экрана результатов
Number ob1(25); // вызов конструктора и создание объектов
Number ob2(5);
cout<<"Вывод из объекта ob1: ";
ob1.show(); // вывод данных объекта
cout<<"Вывод из объекта ob2: ";
ob2.show();
}
Результаты программы:
Работает конструктор: i=25
Работает конструктор: i=5
Вывод из объекта ob1: i=25
Вывод из объекта ob1: i=5
Работает деструктор
Работает деструктор
Объекты класса могут объявляться (значит, и создаваться) сразу после описания класса до точки с запятой. Конструктор может иметь любое число параметров. Например, он может принимать в качестве аргумента имя самого объекта.
Пример 12.
Демонстрация работы программы с объектом, созданным встроенным конструктором до начала действий функции main(). Имя объекта является параметром конструктора. Показан порядок конструирования объектов и разрушения встроенным деструктором.
#include<iostream.h>
#include<conio.h>
class Number1 // описание класса
{ char *str; // указатель на строку
public:
Number1 (char *name) // встроенный конструктор
{ cout<<"Создан объект с именем " <<name<<" класса Number1\n";
str = name; // присваивание имени элементу str класса
}
~Number1 // встроенный деструктор
{ cout<< "Объект " << str <<" разрушен\n";
}
} one ("one"); // создание объекта one с инициализацией
void main()
{ // clrscr(); // после чистки экрана не виден объект one
Nimber1 two (two); // вызов конструктора для объекта two
// getch(); // при задержке не видно работы деструктора
}
Результаты программы:
Создан объект с именем one класса Number1
Создан объект с именем two класса Number1
Объект two разрушен
Объект one разрушен
Комментарий к программе.
Для статических объектов память распределяется компилятором: конструктор вызывается перед main, а деструктор – после main. Если конструктор не определен, С++ использует неявный или встроенный. В случае автоматических объектов освобождение памяти происходит, когда нарушается область действия (заканчивается включающий блок). Любой определенный программистом деструктор вызывается, когда уничтожаются статические или автоматические объекты.
В примере компилятор автоматически вызвал конструктор при входе в программу для создания элемента локального статического объекта one. При создании автоматического объекта two конструктор был вызван явно. При выходе из функции main() завершается область определения объекта two и компилятор неявно вызывает деструктор. Второй раз деструктор вызывается при завершении всей программы для разрушения объекта one. Таким образом, разрушение объектов деструктором выполняется в порядке обратном их созданию конструктором.
|
|
|
Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...
История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...
Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...
Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьшения длины пробега и улучшения маневрирования ВС при...
© cyberpedia.su 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!