Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

628_Nechta_I.V._Osnovy_ob`ektno-orientirovannogo_

.pdf
Скачиваний:
8
Добавлен:
12.11.2022
Размер:
333.92 Кб
Скачать

КОНТРОЛЬНЫЕ ВОПРОСЫ

В каких случаях используется исключение?

Что такое шаблон и для чего он используется?

Лабораторная работа №10. Конструкторы и деструкторы

ЦЕЛЬ РАБОТЫ: Научиться пользоваться конструкторами объектов.

ОСНОВНЫЕ СВЕДЕНИЯ

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

сlass A{

public: int i, *mas;

A(){ //конструктор i =0;

mas=new int[10];

….

}

}

int main(){

A a; //при создании объекта конструктор вызовется автоматически

a.A(); // Неверно. Конструктор в явном виде вызывать

нельзя.

}

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

сlass A{ public: int i, *mas;

21

A(){

i =0;

mas=new int[10];

}

A(int x){ i =x;

mas=new int[10];

}

A(int x, int size){ i =x;

mas=new int[size];

}

}

Иногда требуется на стадии объявления проинициализировать объект присвоив ему значения другого объекта, например:

int main(){ A a1;

a1.x=8;

A b1=a1; //инициализация другим объектом

}

В таком случае необходимо определить конструктор копирования следующим образом.

class A{ public:

int i, *mas;

A(){

i =0;

mas=new int[10];

}

A (class A & x){ i=x.i;

mas=new int [10];

for (int k=0;k<10;k++)mas[k]=x.mas[k]; //копируем весь

массив

}

Если конструктор копирования не определить, то будет вызываться конструктор по умолчанию, который просто копирует участок памяти, содержащий данный объект. В таком случае указатель mas будет ссылаться на одну и ту же область памяти, что ошибочно. Следовательно, мы должны полностью скопировать содержимое массива. Только после «полного» копирования, наши объекты будут независимы друг от друга.

22

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

сlass A{ public: int i, *mas;

A(){ // конструктор i =0;

mas=new int[10];

}

~A(){ //деструктор delete mas;

}

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

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

delete [ ] ObjectArray;

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

ЗАДАНИЕ

Доработайте программу «Магазин» добавив в него конструкторы (с параметрами, конструкторы копирования) и деструкторы для всех имеющихся в программе классов.

КОНТРОЛЬНЫЕ ВОПРОСЫ

Как вызывается конструктор?

В каком порядке вызываются конструкторы и деструкторы при наследовании?

23

Заключение

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

Список дополнительной литературы

1.Шилдт Г. Самоучитель С++: Пер. с англ. – 3-е изд: - СПб.: БХВ-Петербург, 2001. 688 с.

2.Иванова Г.С., Ничушкина Т.Н., Пугачев Е.К. Объектно-ориентированное

программирование: Учеб. для вузов / Под. Ред. Г.С. Ивановой. — М.: Издво МГТУ им. Н.Э.Баумана, 2001. 320 с.

3. Буч Г. Объектно-ориентированный анализ и проектирование с примерами приложений на С++: пер. с англ. М.: Бином, СПб.: Невский диалект, 1998.

4.Скляров В.А. Язык С++ и объектно-ориентированное программирование.

М.: Высш. шк., 1997. 478 с.

24

СОДЕРЖАНИЕ

 

Введение................................................................................................................

3

Лабораторная работа №1.

 

Создание и использование динамических массивов...........................................

4

Лабораторная работа №2.

 

Использование динамических структур данных.................................................

6

Лабораторная работа №3.

 

Принцип инкапсуляции. Описание объектного типа .........................................

9

Лабораторная работа №4.

 

Принцип наследования. Создание иерархии классов.......................................

11

Лабораторная работа №5.

 

Принцип полиморфизма. Использование виртуальных методов.....................

12

Лабораторная работа №6. Использование динамических объектов...............

14

Лабораторная работа №7. Разработка класса STRING....................................

16

Лабораторная работа №8. Шаблоны.................................................................

18

Лабораторная работа №9. Разработка программы «Магазин»........................

19

Лабораторная работа №10. Конструкторы и деструкторы..............................

21

Заключение..........................................................................................................

24

Список дополнительной литературы.................................................................

24

25

Учебное издание

Нечта Иван Васильевич Ситняковская Елена Игоревна

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

Учебно-методическое пособие

В авторской редакции

Редактор А.В. Ефимов

Подписано в печать 10.05.2016,

формат бумаги 60x84/16, отпечатано на ризографе, шрифт 10, п. л. 1,6, заказ № 71, тираж 500 экз.

Редакционно-издательский отдел СибГУТИ 630102, г. Новосибирск, ул. Кирова, 86, офис 105

тел. (383) 269-83-56

26