Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_ООП_1-3иприм.doc
Скачиваний:
6
Добавлен:
15.11.2019
Размер:
248.83 Кб
Скачать

1. Простейшие опыты

Проделать эксперименты с одним из пяти первых примеров классов.

1.1. изменить ключ struct на class, а также статус доступа public, privat или protected – как будет реагировать компилятор при обращении к компонентным данным объектов в главной программе. Пройтись по программе отладчиком Debug, инструментом Inspector проконтролировать свойства всех объектов в программе.

1.2. по усмотрению студента добавить новые или модернизировать компонентные функций (методы) и конструкторы.

1.3. Добавить во все классы (и файлы) статическую переменную – счетчик числа создаваемых объектов и статическую функцию для инициализации этой переменной. (Пример объявления и инициализации статической переменной см. проект goods). “Прописать явно ” для каждого класса в конструкторе и в деструкторе вывод сообщений – типа “создано 5 объектов” ”объект № 3 класса point разрушился”. Например

main( ){

point T1, T2(50,30); // здесь вызовутся конструкторы, сколько создастся объектов ?

{ point T4,T5; point D=point(T2);

. . . //здесь тоже, сколько создастся объектов ? Оч. интересно!

} //здесь разрушатся объекты T1 и T2

} //здесь тоже, сколько ? , пусть эту информацию сообщит деструктор

1.4. Опробовать явный вызов деструктора, в том числе и за границами области видимости. Можно ли объявлять объекты класса с модификатором static ? Например static point T2 ? Когда разрушится объект T2 ?

1.5. Модернизировать класс point, добавив в него компоненты: - радиус (большая точка) и цвет. Разработать вызывающую программу, иллюстрирующую полезность нового типа point. Например, сформировать из точек интересную фигуру или циклическое движение массива объектов-точек и/или изменение размеров, цвета.

Отчет по 1 части (по простейшим опытам) должен содержать :

1. Результаты опытов, т.е. сообщения программы или компилятора, например: “При таком то опыте компилятор выдал следующее сообщение, что означает ….”. Сопровождать необходимыми фрагментами программы (текст всей программы не требуется).

2. Заключение о степени полезности, удобства новых типов данных-классов для примеров 2-5 и выводы.

2. Исследование дружественных функций. Работа с комплексными числами

2.1. С помощью класса CMPLX (Файлы CMPLX.CPP и CMPLX.H) с перегруженными дружественными операциями-функциями (+ - * /) решить задачу с комплексными числами, табл. 2 и 3. Вариант выбирается по формуле Nv= № MOD 5 +1

Таблица 2. Расчетные формулы

Nv =1

Nv =2

Nv =3

Nv =4

Nv =5

Значения комплексных чисел A, B, C и D взять из в табл. 3, полученное число Z проверить вручную.

2.2. Перегрузить функцию cmplx sqrt(cmplx); для класса cmplx комплексных чисел, из файла CMPLX.H и решить квадратное уравнение z= A*X2 + B*x + C с комплексными переменными по формулам Виетта. Числа A, B и C взять из предыдущей работы. Квадратный корень из комплексного числа X равен

, где - модуль, - аргумент комплексного числа X.

2.3. Подключить к главной программе стандартный библиотечный файл complex.h и решить задачи 3.1 и 3.2 с классом complex, убедиться в совпадении результатов.

Отчет по 3й части должен содержать: -тексты программ, - ручные проверки и выводы.

Таблица 2. Значения комплексных чисел к задачам 3.1 и 3.2

1

1+2 j

5 – 3 j

1 + 1 j

2 + 1 j

16

5 + 2 j

5 + 2 j

1 – 2 j

3 –3 j

2

2 + 3 j

0.5 +1 j

1 + 2 j

2 + 5 j

17

3 – 2 j

2 – 5 j

2 – 2 j

2 +3 j

3

1 + 1 j

2 + 3 j

3 + 2 j

0.5 - 0.5 j

18

1 – 3 j

-5 + 2 j

0.5–0.5 j

1 –1j

4

2+0.5 j

0.5 –2 j

-1.5–1.5 j

2+0.5 j

19

2 – 3 j

2 –2.5 j

3 – 1 j

2 – 2 j

5

2 +1 j

-2 + 2 j

-3 + 2 j

-2+3.5 j

20

-2 + 3 j

-1–0.5 j

1 – 3 j

3 –5 j

6

2 + 0 j

2.5+2.5 j

2 –3 j

3 – 2 j

21

2 + 5 j

0.5–0.5j

2+2.5 j

5 –3 j

7

1 + 2 j

2 + 0.5 j

2 + 1 j

2 – 5 j

22

5 + 2 j

-0.5–0.5j

2 – 3 j

- 3 +5 j

8

2 + 2 j

-2 +0.5 j

2+0.5 j

5 – 2 j

23

5 +1 j

-0.5+0.5j

-2 + 2 j

-5 +3 j

9

3 – 1 j

1 + 3 j

2 + 3 j

2 + 2 j

24

1 + 5 j

2+0.5 j

0.5 + 1 j

2 +2 j

10

2+2.5 j

3 + 1 j

2 + 5 j

2 – 2 j

25

-2 –5 j

-1 +2 j

0.5 –1 j

1.5+2 j

11

-2.5+0.5j

0.5 +2 j

-5 + 2 j

- 3– 3 j

26

5 – 5 j

-2 –1 j

0.5 –1 j

1.5+2 j

12

0.5–0.5 j

2 –0.5 j

- 3 – 2 j

3 – 3 j

27

5 –5 j

-2 –2 j

0.5 – 2 j

2+ 0.5 j

13

2 – 1 j

3 –2 j

3 – 2 j

2 – 3 j

28

3 + 1 j

1 – 3 j

2 – 1 j

5+ 1 j

14

3 – 2 j

2 + 3 j

3+ 2 j

1 –3 j

29

0.5 +2 j

2 – 3 j

3 – 2 j

1+ 5 j

15

2 + 2 j

2 – 3 j

-1+ 2 j

3 –1 j

30

2 –0.5 j

-2 +3 j

2 + 2 j

-2 –5 j