Отчет_5 (Лабораторная работа №5)
Описание файла
Файл "Отчет_5" внутри архива находится в следующих папках: Лабораторная работа №5, Лаба5. Документ из архива "Лабораторная работа №5", который расположен в категории "". Всё это находится в предмете "объектно-ориентированное программирование (ооп)" из 3 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "объектно-ориентированное программирование (ооп)" в общих файлах.
Онлайн просмотр документа "Отчет_5"
Текст из документа "Отчет_5"
Московский государственный технический университет
им. Н.Э. Баумана
Лабораторная работа №5
по курсу ПППО
«Перегрузка функций и операций»
Вариант №8
5
(количество листов)
Выполнил:
студент группы ИУ5-61
Забаева А.
МОСКВА 2008
-
Цель работы
Целью лабораторной работы является изучение механизмов перегрузки функций и операций при объектно-ориентированном программировании на языке С++. Студенты должны освоить основные способы перегрузки и их особенности, продемонстрировать навыки и знания по перегрузке одноместных и двухместных операция и показать на примере простых собственных классов использование этих возможностей с помощью демонстрационного примера.
Код задания: 1.4, 2.1, 3.3, 4.1
-
Порядок работы
-
Перегрузку функций
-
Использование шаблонов функций
-
Задание параметров по умолчанию в прототипе и описании функции
-
Перегрузку одноместной операции внутреннюю (++)
-
Перегрузку двуместной операции внутреннюю (+)
-
Перегрузку одноместной операции внешнюю (++)
-
Перегрузку двуместной операции внешнюю (+)
-
Перегрузить операцию вывода переменной (<<) как внешнюю
-
Перегрузить операцию вывода переменной (<<) как внутреннюю
-
Создать и грамотно настроить проектный файл для программы ЛР
-
Отладить программу с помощью отладчика с просмотром объектов классов
-
Сформировать листинг программы и листинг результатов.
-
Оформить отчет по ЛР.
-
Перечень ошибок
Использование постфиксного формата операции, при объявленном префиксном.
-
Листинг программы
-
Файл main.cpp:
#include <iostream.h>
#include <conio.h>
#include "classes.h"
void main()
{
cout << "Overloading functions"<< endl;
cout << "Divide('9','5') = " << Divide('9','5') << endl;
cout << "Divide(2L,1L) = " << Divide(6L,4L) << endl;
cout << "Divide(5,2) = " << Divide(5,2) << endl << endl;
cout << "Using function's templates" << endl;
cout << "Average('9','5') = " << Average('9','5') << endl;
cout << "Average(5L,7L) = " << Average(5L,7L) <<endl;
cout << "Average(5,2) = " << Average(5,2) << endl << endl;
cout << "Using function with default parametr" << endl;
cout << "Summ() = " << Summ() << endl;
cout << "Summ(2) = " << Summ(2) << endl;
cout << "Summ(2,3) = " << Summ(2,3) << endl;
cout << "Summ(2,3,5) = " << Summ(2,3,5) << endl << endl;
Test t1(5.5);
cout << "Using unitary operation ++ (internal)" << endl;
cout << "t1 = " << t1.Value() << endl;
cout << "t1++" << endl;
++t1;
cout << "t1 = " << t1.Value() << endl;
cout << "Press any key to continue..." << endl << endl; getch();
Test t2(0.5);
cout << "Using binary operation + (internal)" << endl;
cout << "t1 = " << t1.Value() << endl;
cout << "t2 = " << t2.Value() << endl;
cout << "t1 = t1 + t2" << endl;
t1=t1+t2;
cout << "t1 = " << t1.Value() << endl << endl;
Test1 tt1(1.5);
cout << "Using unitary operation ++ (external)" << endl;
cout << "tt1 = ";
tt1.Print();
cout << endl << "tt1++" << endl;
++tt1;
cout << "tt1 = " << tt1.Value() << endl;
//cout << "Press any key to continue..." << endl << endl; getch();
cout << endl << "Using binary operation + (external)" << endl;
cout << "tt1 = " << tt1.Value() << endl;
cout << "tt1 = tt1 + 5.0" << endl;
tt1=tt1+5.0;
cout << "tt1 = " << tt1.Value() << endl << endl;
cout << "Overload operation <<" << endl;
t1 << cout;
cout << endl << "t1 = " << t1 << endl;
}
-
Файл classes.h:
char Divide(char a,char b)
{
return a/b;
}
long Divide(long a,long b)
{
return a/b;
}
int Divide(int a,int b)
{
return a/b;
}
template <class T>
T Average(T x,T y)
{
return (x+y)/2;
};
int Summ(int a=0,int b=0,int c=0)
{
return a+b+c;
}
class Test
{
public:
Test() {Data=0;}
Test(float x) {Data=x;}
float Value() {return Data;}
Test& operator++() {this->Data++; return *this;}
Test& operator+(Test& t) {this->Data+=t.Data; return *this;}
ostream& operator<<(ostream& s) {return s << "Test: \n{\n\tData=" << this->Data << "\n}";}
friend ostream& operator<<(ostream& s,Test& z) {return s<<z.Data;}
void Print() {cout<<Data<<endl;}
private:
float Data;
};
class Test1
{
public:
Test1(float f) {Data=f;}
double Value() {return Data;}
void Print() {cout << Data;}
friend Test1& operator+(Test1& t,float f) {t.Data=t.Data+f; return t;}
friend Test1& operator++(Test1& t) {t.Data=t.Data+0.1; return t;}
friend ostream& operator<<(ostream& s,Test1& z) {return s<<z.Data;}
private:
float Data;
};
-
Листинг результатов работы
5