Исследование дружественных функций. Работа с комплексными числами
Лабораторные работы 1-3 по ооп
Работы 1 – 3 выполняются на основе готовой лабораторной работы “Разработка функций по обработке структурных типов данных “ - № 13 по программированию, т.е. решают ту же самую задачу, только на базе классов. При этом,
в лаб. №1 создается свой собственный класс в минимальном комплекте (включая описание полей данных, конструкторов, деструктора и один – два простых метода) и с этим классом выполняется ряд упражнений.
- в лаб. №2 осуществляется перегрузка функций и перегрузка операцийдля своего или других классов.
- наконец в лаб3 создается окончательно полноценный класс со всеми возможными и необходимыми компонентами, включая перегрузку операций вставки/извлечения <</>> объектов своего класса в стандартные потоки ввода/вывода.
Темы практических занятий, лабораторных работ и домашних заданий
Практические занятия
1. Объектно-ориентированное проектирование классов
2. Особенности перегрузки конструкторов и операции =
3. Объектно-ориентированное проектирование иерархии классов
Лабораторные работы
1. Исследование классов и объектов (4 ч)
2. Перегрузка функций и операций (2 ч)
3. Разработка собственных классов (4 ч) (Создание полноценного класса со всеми необходимыми методами, операциями и конструкторами)
4. Полиморфизм и виртуальные функции 2ч (механизмы раннего и позднего связывания.)
5. Создание иерархии наследуемых классов (4 ч)
|
|
Домашние задания
Дз1. Перегрузка операций <<\>>
Дз2. Создание шаблонов функций и классов
Лабораторная работа № 1. Исследование классов и объектов
Повторить теоретические вопросы:
1. Понятия класса и объекта. Член-данные и член-функции (методы). Статус доступа.
2. Конструкторы и деструкторы, из разновидности: - конструктор по умолчанию, - конструктор копирования, конструктор-инициализатор.
3. Операции доступа к полям и к методам класса. Операция уточнения области видимости (::).
4. Статические данные и функции (методы) класса.
5. Дружественные функции, статус их доступа к данным и к методам класса..
Ознакомиться и провести эксперименты с комплектами учебных файлов:
1. файлы comp1.cpp, comp2.cpp compL2.cpp - простейшие классы комплексных чисел
2. комплект файлов stroka.cpp и stroki.cpp - класс “строка символов” с двумя конструкторами, а так же файл conkat.cpp с перегруженной операцией + (конкатенация строк).
3. комплект файлов goods.cpp, doods_v.cpp - класс “товары в магазине” (со статической переменной)
4. комплект файлов point.h, point.cpp, pointmai.cpp - класс точка на экране
5. Файлы CMPLX.CPP и CMPLX.H с дружественными операциями-функциями (+ - * / ) для комплексных чисел.
|
|
Справки и пояснения по учебным файлам
После перегрузки операции + в Си-программе появляется возможность склеивания строк как в Бейсике.
Обратите внимание, что операция + перегружена для данных типа (класса) stroka и не поддерживает склейку символьных массивов, хотя это вроде бы тоже строки.
Так же обратите внимание (и испытайте), что к перегруженной операции-функции можно обращаться как к обычной функции с именем “operator +”и указанием аргументов в скобках (аргументы)по шаблону :
Новая строка = operator +(строка1, строка2); - если перегружена вне класса, и
Суть работы № 1, в соответствии с ее названием, заключается в проведении экспериментов (опытов) с классами и объектами, для чего студенту требуется изменить (модернизировать) как классы, так главные программы, чтобы понять синтаксис определения классов и доступа к его компонентам. Некоторые опыты очень просты, о них достаточно упомянуть в отчете только результаты. Для других упражнений необходимо привести тексты модернизированных фрагментов программ. Имена модернизированных программ, во избежание путаницы, лучше изменить, не забыв эти изменения и в директивах include.
Простейшие опыты
Проделать эксперименты с одним из пяти первых примеров классов.
|
|
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.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 |
Лабораторная работа № 2.
Дата добавления: 2018-04-15; просмотров: 358; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!