[МГТУ - 2 курс - ООП] Лабораторная работа №5 (Лабораторная работа №5)
Описание файла
Файл "[МГТУ - 2 курс - ООП] Лабораторная работа №5" внутри архива находится в следующих папках: Лабораторная работа №5, [ООП - 2 курс] Лабораторная работа №5. Документ из архива "Лабораторная работа №5", который расположен в категории "". Всё это находится в предмете "объектно-ориентированное программирование (ооп)" из 3 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "объектно-ориентированное программирование (ооп)" в общих файлах.
Онлайн просмотр документа "[МГТУ - 2 курс - ООП] Лабораторная работа №5"
Текст из документа "[МГТУ - 2 курс - ООП] Лабораторная работа №5"
Министерство образования РФ
Государственное образовательное учреждение высшего профессионального образования «Московский государственный технический университет им. Н. Э. Баумана»
Кафедра ИУ5 «Системы Обработки Информации и Управления»
Лабораторная работа №5
по предмету: «Объектно-ориентированное программирование»
на тему: «Перегрузка функций и операций»
Выполнил студент группы ИУ5-31:
Сидякин А.А.
Проверил преподаватель:
Большаков С.А.
Москва 2009
Цель работы: Целью лабораторной работы является изучение механизмов перегрузки функций и операций при объектно-ориентированном программировании на языке С++
-
Порядок выполнения работы:
1) Выполнить перегрузку для простой функции деления с двумя параметрами
2) Продемонстрировать задание параметров функции (char, long, double) по умолчанию в описании функции
3) Продемонстрировать использование шаблона функции определения максимума из двух
4) Для нового класса Test выполнить перегрузку одноместной операции как внутренний метод “++” для типа float
5) Для нового класса Test выполнить перегрузку двуместной операции как внутренний метод “+” для типа float
6) Для нового класса Test1 выполнить перегрузку одноместной операции как внешнюю функцию (как friend) “++” для типа float
7) Для нового класса Test1 выполнить перегрузку двуместной операции как внешнюю функцию (как friend) “+” для типа float
8) Перегрузить операцию вывода переменной класса “<<” как внешнюю функцию (как friend) для ранее созданных классов (Test ,Test1)
-
Перечень ошибок исправленных при отладке программы:
1) Неправильное определение шаблона функции нахождения максимума
2) Двойное объявление объекта класса, нужно было использовать два разных объекта
-
Диаграмма классов
-
Листинг программы:
#include <iostream.h>
#include <conio.h>
char division(char a, char b) {return a/b;}
long division(long a, long b) {return a/b;}
double division(double a, double b) {return a/b;}
template <class Type> Type max (Type a, Type b) {return a>b ? a : b;}
class Test
{
public:
Test(float datIDX = 0) {dat = datIDX;}
~Test() {}
Test operator +(const Test& TestObj);
Test& operator ++() {dat++; return *this;}
Test& operator ++(int){return operator ++();}
friend ostream& operator <<(ostream& out, Test& T);
private:
float dat;
};
Test Test::operator +(const Test& TestObj)
{
Test T(dat + TestObj.dat);
return T;
}
ostream& operator <<(ostream& out, Test& T)
{
return out << T.dat;
}
class Test1
{
public:
Test1(float datIDX = 0) {dat = datIDX;}
~Test1() {}
friend Test1 operator +(const Test1& T1, const Test1& T11) ;
friend Test1& operator ++(Test1& T);
friend Test1& operator ++(Test1& T, int);
friend ostream& operator <<(ostream& out, Test1& T);
private:
float dat;
};
Test1& operator++(Test1& T)
{
T.dat++;
return T;
}
Test1& operator ++(Test1& T, int)
{
return operator++(T);
}
Test1 operator+(const Test1& T1, const Test1& T11)
{
Test1 T(T1.dat + T11.dat);
return T;
}
ostream& operator <<(ostream& out, Test1& T)
{
return out << T.dat;
}
void main()
{
cout << "Function overload:" << endl;
cout << "Division of char: a / b = " << division('a', 'b') << endl;
cout << "Division of long: 66666 / 33333 = "
<< division(66666, 33333) << endl;
cout << "Division of double: 4.5 / 1.5 = " << division(4.5, 1.5) << endl << endl;
cout << "Using template for function max:" << endl;
cout << "between int: 90 and 200 = " << max(90, 200) << " is the max" << endl;
cout << "between double: 56.43256 and 23.9854 = " << max(56.43256, 23.9854) << " is the max" << endl << endl;
cout << "Creating objects of classes Test and Test1..." << endl;
Test TObj1(2.5), TObj2(3.1); Test1 T1Obj1(7.3), T1Obj2(1.6);
cout << "Objects have been successfully created" << endl << endl;
cout << "TObj1 = " << TObj1 << endl << "TObj2 = " << TObj2 << endl;
cout << "T1Obj1 = " << T1Obj1 << endl << "T1Obj2 = " << T1Obj2 << endl << endl;
cout << "TObj1 + TObj2 = " << TObj1 + TObj2 << endl;
cout << "TObj1++ = " << TObj1++ << endl << endl;
cout << "T1Obj1 + T1Obj2 = " << T1Obj1 + T1Obj2 << endl;
cout << "T1Obj1++ = " << T1Obj1++ << endl;
getch;
}
-
Листинг результатов работы программы: