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



Лабораторные работы 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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!