Конструкторы и деструкторы реферат

Обновлено: 04.07.2024

Класс может содержать любое количество функций - членов самого разнообразного назначения, но два типа функций занимают особое положение. Эти функции называются конструктором и деструктором.

Для многих объектов естественно требовать, чтобы они были инициированы (т.е. имели начальное значение, а не мусор) до начала их использования.

В С++ для упрощения процесса инициализации объектов предусмотрена специальная функция, называемая конструктором.

Конструктор – это компонентная функция, вызываемая автоматически при создании объекта класса и выполняющая необходимые инициализирующие действия.

Основное назначение – инициализация объектов.

- инициализация данных класса - задание им начальных

значений программно или по умолчанию,

перевод видеосистемы в графический режим

инициализация объектов вспомогательных классов и. т. д.

Имя конструкторадолжно совпадать сименем класса.

3) Функция-конструктор не может возвращать результат, даже тип void не

4) Функция автоматическивызывается при определении объекта, или при размещении в памяти объекта с помощью операцииnew.

Формат определения конструктора в теле класса:

( список формальных параметров)

Конструктор, как и любая компонентная функция, может быть определен и вне тела класса, имея в теле класса прототип.

public:

T ( список параметров) ;

T::T( список параметров)

Как правило, конструкторы объявляются в открытой части класса

Конструктор может отсутствовать, при создании экземпляров класса

компилятор автоматически выделяет под них память, хотя в этом случае

данные не инициализируются, и будут содержать мусор.

8) В определении класса могут присутствовать несколько конструкторов.

Деструктор - это функция, которая автоматически выполняется, когда экземпляр класса уничтожается.

( либо при выходе объекта за пределы своей области видимости, либо при уничтожении динамического объекта операцией delete).

Назначение – выполнение завершающих действий (напр., закрытие файлов, установка видеосистемы в исходное состояние, написание каких-либо фраз и т.д.)

Деструктор используется, например, если объект – локальный и ему динамически выделялась память,целесообразно, чтобы при выходе из блока, когда объект перестает существовать, память была возвращена системе. Желательно, чтобы память освобождалась автоматически, операцию освобождения памяти можно включить в деструктор.

Класс может иметь несколько конструкторов, но деструктор может быть только один.

Формат компонентной функции-деструктора

Между тильдой и именем класса нет пробелов.

У деструктора нет типа результата даже void и нет параметров даже типаvoid.

Деструктор выполняется неявно, автоматически, как только объект уничтожается. Его, как правило, никогда не вызывают, но можно и вызывать явно, если он определен в классе

При этом объект будет продолжать существовать, только выполняться те действия, которые записаны в теле деструктора.

Рассмотрим класс Men, несущий в себе данные о возрасте и имени индивидуума.

Пусть в этом классе присутствуют и конструктор и деструктор.

В конструкторекроме инициализирующих действий имеется еще вывод контрольной строки.

Деструкторпусть также содержит вывод другой контрольной строки.

Men(char * n, int a) //встроенный конструктор

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

Используя язык высокого уровня, программисты могли писать программы до нескольких тысяч строк длиной. Для того времени указанный подход к программированию был наиболее перспективным. Однако язык программирования, легко понимаемый в коротких программах, когда дело касалось больших программ, становился нечитабельным (и не управляемым). Относятся языки Алгол, Паскаль и Си. Сутью структурного программирования является возможность разбиения программы на составляющие её элементы.

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

случае вся процедура в целом упрощается, и программист получает возможность оперировать с гораздо большими по объёму программами.

Наиболее распространенным объектно-ориентированным языком программирования, безусловно, является C++. Свободно распространяемыекоммерческие системы программирования C++ существуют практически на любой платформе.

Теоретическая часть

Основные понятия объектно-ориентированного программирования

Основополагающей идеей одного из современных подходов к программированию — объектно-ориентированному — является объединение данных и обрабатывающих их процедур в единое целое — объекты.

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

Инкапсуляция — это механизм, который объединяет данные и методы, манипулирующие этими данными, и защищает и то и другое от внешнего вмешательства или неправильного использования. Когда методы и данные объединяются таким способом, создается объект.

Понятие класс

Основное отличие класса от структур состоит в том, что все члены класса по умолчанию считаются закрытыми и доступ к ним могут получить только функции — члены этого же класса. Однако элементами класса записывается соответствующий спецификатор доступа. Существуют три таких спецификатора:режим доступа к элементам класса может быть изменен путем его явного указания. Для этого перед

Режим доступа p r i v a t e обозначает, что соответствующий элемент может использоваться только функциями данного класса. Этот режим доступа устанавливается по умолчанию. Элементы с режимом доступа p u b l i c доступны в других частях программы.

Интерфейс класса

Все методы класса, находящиеся в его открытой части (с уровнем доступа public) называют интерфейсом класса.Интерфейс предназначен для взаимодействия класса с остальной программой. Зная методы интерфейса и их назначение можно использовать класс, не вникая в его внутреннее устройство. Соответственно, интерфейс реализует принцип инкапсуляции.

Понятие объект

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

Допустим, в программе необходимо работать со странами. Страна – это абстрактное понятие. У нее есть такие характеристики, как название, население, площадь, флаг и другое. Для описания такой страны будет использоваться класс с соответствующими полями данных. Такие страны, как Россия и Украина будут уже объектами (конкретными представителями типа страна).

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

.

->

Конструктор и деструктор

При создании объектов одной из наиболее широко используемых операций которую вы будете выполнять в ваших программах, является инициализация элементов данных объекта. Чтобы упростить процесс инициализации элементов данных класса, C++ использует специальную функцию, называемую конструктором, которая запускается для каждого создаваемого вами объекта. Также C++ обеспечивает функцию, называемую деструктором, которая запускается при уничтожении объекта.

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

Любой переменной, участвующей в работе программы, требуется память и некоторое начальное значение. Для переменных встроенных типов размещение в памяти обеспечивается компилятором. Для локальных переменных память выделяется из стека программы и занимается для хранения значения данной переменной до тех, пока не закончится время ее жизни. Сложные типы данных также должны размещаться в памяти и уничтожаться когда их время жизни закончилось. Это осуществляется с использованием конструкторов и деструкторов.

Конструктор (constructor) - это функция-член, имя которой совпадает с именем класса, инициализирующая переменные-члены, распределяющая память для их хранения (new).

Деструктор (destructor) - это функция-член, имя которой представляет собой ~имя класса, предназначенная для уничтожения переменных (delete).

Одной из особенностей конструктора и деструктора является то, что в отличие от всех остальных функций, у них нет возвращаемого значения.

4.3.1. Конструкторы

Конструктор по умолчанию

Конструктор, не требующий аргументов, называется конструктором по умолчанию. Конструктор по умолчанию не имеет аргументов и инициализирует все переменные члены какими-либо начальными значениями.

При создании любого экземпляра класса вызывается конструктор. Если при описании экземпляра не указываются никакие параметры – вызывается конструктор по умолчанию:

Полный конструктор

Полный конструктор позволяет явно инициализировать все переменные-члены класса.

Если при описании экземпляра класса в скобках указать параметры, при создании экземпляра класса будет вызван полный конструктор и переменные-члены инициализируются указанными значениями.

Неполный конструктор

Возможен и неполный конструктор, когда в списке параметров указываются не все возможные параметры для инициализации членов класса, а только наиболее часто используемые. Остальные параметры будут инициализированы значениями по умолчанию.

Инициализация переменных-членов класса в конструкторах может осуществляться не только в теле конструктора, но и после оператора :. При этом, во время присваивания переменной-члену значения, будет вызываться не оператор присваивания, а конструктор. Для встроенных типов данных, таких как double или int, это не существенно, но если членами класса являются абстрактные типы, вызов конструктора вместо оператора присваивания будет выполняться быстрее.

или такой вариант:

Конструктор копирования

Конструктор копирования создает копию уже существующего экземпляра класса, копируя поэлементно переменные-члены. Конструктор копирования также используется при передаче экземпляров класса в функции по значению. Обратите внимание, что экземпляр класса передается в конструктор по константной ссылке.

4.3.2. Деструктор (пример 4.4. Конструктор и деструктор класса Матрица)

Деструктор осуществляет освобождение памяти, например уничтожение объектов размещенных динамически.

В классе Lens никакого динамического размещения не происходило, поэтому деструктор будет пустой, но его наличие все равно обязательно. Для примера реализации деструктора, представим, что имеется класс Matrix, который в конструкторе динамически создает двумерный массив размерности n x m. Тогда деструктор должен освобождать память, которую выделяет конструктор.

Конструктор вызывается в момент создания переменной, деструктор вызывается когда время жизни переменной закончилось, то есть когда встречается закрывающая фигурная скобка > блока, в которой была объявлен экземпляр класса, либо когда вызывается оператор delete при динамическом размещении экземпляра класса.

4.3.3. Проверка правильности параметров. Исключительные ситуации

Конструкторы должны проверять передаваемые им аргументы на корректность значений. Например, показатель преломления не может быть меньше 1. Что делать, если в конструктор были переданы неправильные параметры? Для этого в языке С++ существуют исключительные ситуации.

Класс exception является стандартным базовым классом C++ для всех исключений. Исключения можно сгенерировать в случае возникновения непредвиденной ошибки, например мы предполагаем что при вызове класса Lens никто не будет пытаться задать показатель преломления меньше 1, но при этом такая ситуация возможна, и это может привести к ошибке. Сгенерировать исключительную ситуацию можно при помощи оператора throw:

Для обработки возникшей исключительной ситуации используются try и catch блоки.

В блок try заключается код, в котором предположительно могут возникнуть исключительные ситуации. В нашем случае это вызов конструктора. Кроме того, в этот же блок заключают операторы, которые должны быть пропущены в случае, если исключение возникает. В нашем случае вычисление и вывод на экран параксиальных характеристик не имеет смысл выполнять, если в конструкторе возникла ошибка.

Если никаких исключений в try-блоке не происходит, программа игнорирует его catch-обработчик.

Конструктором называется функция-член класса, которая выделяет память под поля данных класса и производит их инициализацию, т.е. задает начальные значения в месте объявления переменных.

Имя конструктора совпадает с именем класса. Например, в классе Location конструктор имеет следующий вид: Location (int _x, int _y).

Конструктор не возвращает никакого значения, даже void.

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

В общем случае конструкторы классов могут иметь списки параметров, которые могут потребоваться при инициализации. При этом программист будет обязан задать список инициализации при описании каждого нового объекта.

Конструкторов в классе может быть много. В этом случае реализуется механизм перегрузки функции.

Если конструкторы не объявлены, компилятор сам создает конструктор без параметров по умолчанию.

Объявление объектов можно проиллюстрировать следующим образом:

Похожие главы из других работ:

1. Конструкторы классов

После того как класс определен и заданы объекты этого класса, как правило, возникает необходимость выполнения каких-либо действий по инициализации каждого из объектов.

3. Деструкторы классов

инициализация программа конструктор деструкция Для выполнения действий, обратных совершаемым конструкторами, т.е., например, освобождение заказанной памяти, закрытие открытых конструктором файлов и т.п., в С++ введен механизм деструкторов.

3. Конструкторы производного класса

Это потенциальная проблема в программе COUNTEN. Что будет, если мы захотим инициализировать значением объект класса CountDn? Сможем ли мы воспользоваться конструктором класса Counter с одним аргументом? Ответ будет отрицательным.

5.2 Конструкторы и функции

Ни в базовом, ни в производном классах нет конструкторов, поэтому компилятор, наталкиваясь на определения типа manager m1, m21; использует конструктор, установленный по умолчанию для класса manager, вызывающий конструктор класса employee.

7. Конструкторы при множественном наследовании

Программа EMPMULT не имеет конструкторов. Рассмотрим пример, показывающий, как работают конструкторы при множественном наследовании. Представим, что мы пишем программу для строителей-подрядчиков, которая работает со строительными материалами.

4. Конструкторы и деструкторы

Конструктором называется функция-член класса, которая выделяет память под поля данных класса и производит их инициализацию, т.е. задает начальные значения в месте объявления переменных. Имя конструктора совпадает с именем класса. Например.

1.4 Конструкторы

Конструктор предназначен для инициализации объекта и вызывается автоматически при его создании. Ниже перечислены основные свойства конструкторов. Конструктор не возвращает значение, даже типа void. Нельзя получить указатель на конструктор.

3. Конструкторы производных классов

Для некоторых производных классов требуются конструкторы. Если у базового класса есть конструктор, он должен вызываться при объявлении объекта, и если у этого конструктора есть параметры, их необходимо предоставить.

1.3 Конструкторы и деструкторы

Конструктор предназначен для инициализации объекта вызывается автоматически при его создании. Ниже перечислены основные свойства конструкторов: Конструктор не возвращает значение. Нельзя получить указатель на конструктор.

1.3 Конструкторы и деструкторы

Среди методов класса различают два особых метода: конструктор и деструктор. Конструктор - это специальный метод класса, предназначенный для инициализации членов класса.

Создание web-сайта агентства по организации праздников "Креатив" на платформе CMS Joomla!, построенной на базе данных MySQL с использованием PHP

1. Конструкторы сайтов.

1.3 Конструкторы игр

Для создания современной игры требуется усвоить огромное количество информации из самых разных областей знаний. В сети можно найти огромное количество программ по созданию игр.

Читайте также: