- •Лабораторные работы 1-3 по ооп
- •Справки и пояснения по учебным файлам
- •1. Простейшие опыты
- •2. Исследование дружественных функций. Работа с комплексными числами
- •Лабораторная работа № 2. Перегрузка функций и перегрузка операций
- •2. Комплект файлов point.H, point.Cpp, pointmai.Cpp - класс точка на экране
- •Справки и пояснения по учебным файлам
- •Упражнение 1. Перегрузка функций
- •Упражнения 2. Перегрузка операций
- •1. Данные класса и статус их доступа
- •2. Методы класса Point
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 |