lab5 (Лабораторная работа №5)
Описание файла
Файл "lab5" внутри архива находится в следующих папках: Лабораторная работа №5, Лаба5, Lab_5. Документ из архива "Лабораторная работа №5", который расположен в категории "". Всё это находится в предмете "объектно-ориентированное программирование (ооп)" из 3 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "объектно-ориентированное программирование (ооп)" в общих файлах.
Онлайн просмотр документа "lab5"
Текст из документа "lab5"
Московский государственный технический университет
им. Н.Э. Баумана
Лабораторная работа №5
по курсу ПППО
«Перегрузка функций и операций»
Вариант №26
5
(количество листов)
Выполнил:
студент группы ИУ5-62
Суслов А.Ю.
МОСКВА 2007
-
Цель работы
Целью лабораторной работы является изучение механизмов перегрузки функций и операций при объектно-ориентированном программировании на языке С++. Студенты должны освоить основные способы перегрузки и их особенности, продемонстрировать навыки и знания по перегрузке одноместных и двухместных операция и показать на примере простых собственных классов использование этих возможностей с помощью демонстрационного примера.
Код задания: 1.2, 2.3, 3.1, 4.3
-
Порядок работы
-
Перегрузку функций
-
Использование шаблонов функций
-
Задание параметров по умолчанию в прототипе и описании функции
-
Перегрузку одноместной операции внутреннюю (++)
-
Перегрузку двуместной операции внутреннюю (+)
-
Перегрузку одноместной операции внешнюю (++)
-
Перегрузку двуместной операции внешнюю (+)
-
Перегрузить операцию вывода переменной (<<) как внешнюю
-
Перегрузить операцию вывода переменной (<<) как внутреннюю
-
Создать и грамотно настроить проектный файл для программы ЛР
-
Отладить программу с помощью отладчика с просмотром объектов классов
-
Сформировать листинг программы и листинг результатов.
-
Оформить отчет по ЛР.
-
Перечень ошибок
Использование постфиксного формата операции, при объявленном префиксном.
-
Листинг программы
-
Файл main.cpp:
#include <iostream.h>
#include <conio.h>
#include "classes.h"
void main()
{
cout << "Перегрузка функций"<< endl;
cout << "Subtract('9','5') = " << Subtract('9','5') << endl;
cout << "Subtract(2L,1L) = " << Subtract(2L,1L) << endl;
cout << "Subtract(2.0f,1.0f) = " << Subtract(2.0f,1.0f) << endl << endl;
cout << "Использование шаблонов функций" << endl;
cout << "Max('9','5') = " << Max('9','5') << endl;
cout << "Max(5L,7L) = " << Max(5L,7L) <<endl;
cout << "Max(3.2,2.3) = " << Max(3.2,2.3) << endl << endl;
cout << "Использование функций c параметрами по-умолчанию" << 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;
cout << "Перегрузка одноместной операции ++ (внутр.)" << 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(5);
cout << "Перегрузка двуместной операции + (внутр.)" << 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 << "Перегрузка одноместной операции ++ (внеш.)" << 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 << "Перегрузка двуместной операции + (внеш.)" << endl;
cout << "tt1 = " << tt1.Value() << endl;
cout << "tt1 = tt1 + 5.0" << endl;
tt1=tt1+5.0;
cout << "tt1 = " << tt1.Value() << endl << endl;
cout << "Перегрузка операции <<" << endl;
t1 << cout;
cout << endl << "t2 = " << t2 << endl;
}
-
Файл classes.h:
char Subtract(char a,char b)
{
return a-b;
}
long Subtract(long a,long b)
{
return a-b;
}
double Subtract(double a,double b)
{
return a-b;
}
template <class T>
T Max(T x,T y)
{
return (x>y) ? x : y;
};
int Summ(int a=0,int b=0,int c=0)
{
return a+b+c;
}
class Test
{
public:
Test() {Data=0;}
Test(int x) {Data=x;}
int 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:
int Data;
};
class Test1
{
public:
Test1(double i) {Data=i;}
double Value() {return Data;}
void Print() {cout << Data;}
friend Test1& operator+(Test1& t,double 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:
double Data;
};
-
Листинг результатов работы
5