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


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

1. Порядок выполнения работы.

1. Ознакомьтесь с теоретической частью.

2. Разберитесь с работой программ 1 — 5.

3. В программе 6 вставьте перегружаемый оператор delete. Откомпилируйте программу и разберите ее работу в отладочном режиме.

4. Выполните индивидуальное задание.

2. Индивидуальные задания.

1. Определите класс string. Для него определите операцию сцепления "+" и операцию "добавить к концу" ("+="). Какие другие операции могли бы быть выполнены над string.

2. Определите класс DATA, для которого выполняются операции "+", "-". Создайте две версии с использованием дружественных функций и функций-членов. Сравните два эти варианта.

3. Определите класс string так, что операцию получения подстроки можно использовать с левой стороны присваивания. Сначала напишите версию, в которой строку можно присвоить подстроке той же самой длины, а затем версию, в которой длины могут быть различны.

4. Определить класс INT, который ведет себя точно так же, как int. Подсказка: определите INT::operator int( ).

5. Определите класс TIME, для которого выполняются операции "+", "-". Создайте две версии с использованием дружественных функций и функций-членов. Сравните два эти варианта.

6. Определите класс RINT, который ведет себя как int, за исключением того, что разрешены только операции "+" (унарный и бинарный), "-" (унарный и бинарный), "*", "/", "%". Подсказка: не определяйте INT::operator int( ).

7. Определите класс LINT, который ведет себя так, как RINT, за исключением того, что он имеет по меньшей мере 64 бита точности.

8. Определите класс complex, tiny (4 бита), не исполь-зуя дружественных функций. Используйте только функции-члены класса.

9. Определите тип vec4 как вектор из четырех float. Опреде- лите operator[] для vec4. Определите операции "+", "-", "*", "/","=", "+=", "-=", "*=", "/=" для комбинаций векторов и чисел с плавающей точкой.

10. Определите класс mat4 как вектор из четырех vec4. Определите operator[], возвращающий vec4 для mat4. Опреде-лите обычные операции над матрицами для этого типа.

11. Определите класс vector, подобный vec4, но с раз-мером, данным как аргумент для конструктора vector::vector(int).

12. Определите класс matrix, подобный mat4, но с раз-мерностями, данными как аргументы для конструктора matrix::matrix(int,int).

3. Отчет по работе

— Название работы и ее цель;

— Ответы на поставленные вопросы в порядке проведения рабо-ты;

— Листинг разработанной и отлаженной программы индивидуаль-ного задания.

4. Вопросы по лабораторной работе

1. Что такое перегрузка операций? Для чего определяется в классе перегрузка операций?

2. Какие операции можно перегружать?

3. Какие функции называются дружественными? Как в классе определяются дружественные функции?

4. Отличие в использовании дружественных функций при пере-грузке операций от функций-членов.

5. Что значит дружественные классы?

6. Как определяются дружественные классы?

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

8. Как можно перегрузить операторы new и delete?

9. Как можно перегружать оператор индексирования массива?

10. Как перегружается оператор вызова функции?

Загрузка...