Отчет_лаб5 (Лабораторная работа №5)
Описание файла
Файл "Отчет_лаб5" внутри архива находится в следующих папках: Лабораторная работа №5, lab5. Документ из архива "Лабораторная работа №5", который расположен в категории "". Всё это находится в предмете "объектно-ориентированное программирование (ооп)" из 3 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "объектно-ориентированное программирование (ооп)" в общих файлах.
Онлайн просмотр документа "Отчет_лаб5"
Текст из документа "Отчет_лаб5"
Московский государственный технический университет им. Н.Э.Баумана
_________________________________________________________________
Лабораторная работа №5 по дисциплине ПППО
«Перегрузка функций и операций »
ИСПОЛНИТЕЛЬ: | |
студент группы ИУ5-63 | _____________________ |
Абламцев Д.М. | "__"_____________2006 г. |
Москва - 2006
________________________________________________________________
-
Цель работы
Целью лабораторной работы является изучение механизмов перегрузки функций и операций при объектно-ориентированном программировании на языке С++. Студенты должны освоить основные способы перегрузки и их особенности, продемонстрировать навыки и знания по перегрузке одноместных и двухместных операция и показать на примере простых собственных классов использование этих возможностей с помощью демонстрационного примера.
Код задания: 1.1, 2.1, 3.1, 4.1
-
Порядок работы:
В лабораторной работе в изложенном ниже порядке должны быть отражены следующие требования:
-
Описание классов и функций в отдельном файле (lab5.hpp)
-
Все задания должны быть оформлены в виде наглядного вывода (в cout), например, для демонстрации перегрузки функций вывод может быть таким:
// Перегрузка функций
cout << "Перегрузка функций"<< endl;
cout << "Сумма = "<< Sum (2 , 2) <<endl;
cout << "Сумма = "<< Sum (2.1f , 2.1f) <<endl;
cout << "Сумма = "<< Sum (2.0 , 2.1 ) <<endl;
cout << "Сумма = "<< Sum ('c' , '\1' ) <<endl;
getch();
-
При перегрузке функций тип простой функции выбирается из списка вариантов (см. ниже). Во всех функциях задаются 2 параметра однотипные, для выполнения операций (сложения, вычитания, деления и умножения). Перегрузка выполняется для типов параметров указанных в списке вариантов (int , char, long, double, float).
-
При демонстрации шаблонов необходимо указать шаблон для типа функции, определенной номером варианта (см. ниже). Иллюстрация вывода результата выполняется аналогично (см. выше) – типы - ( int , char, long, double, float) для всех.
-
При демонстрации функции с параметрами по-умолчанию, задается функции Summ, которая складывает три параметра (тип int). Нужно показать четыре случая вызова функции (нет параметров, один, два и три). Иллюстрация вывода результата выполняется аналогично (см. выше).
-
Перегрузка внутренней одноместной операции выполняется в новом простом классе (типы: int, float , long). Тип и обозначение операции определяется с вариантом. Класс называется Test.
-
Перегрузка внутренней двухместной операции выполняется в новом простом классе (типы: int, float , long). Тип и обозначение операции определяется с вариантом. Класс называется Test.
-
Перегрузка внешней одноместной операции выполняется в новом простом классе (типы: int, float , long). Тип и обозначение операции определяется с вариантом. Класс называется Test1.
-
Перегрузка внешней двухместной операции выполняется в новом простом классе (типы: int, float , long). Тип и обозначение операции определяется с вариантом. Класс называется Test1.
-
Перегрузка операции вывода выполняется внешней (friend) функцией для классов Test и Test1.
-
Перечень ошибок исправленных при отладке программы
Проблем замечено не было.
4. Листинги программ.
-
lab5.cpp
#include <iostream.h>
#include "lab5.hpp"
void main(void)
{
cout << "Перегрузка функции(ф-ия сложения):" << endl;
cout << "Сумма(int 3, int 10)=" << sum(3,10) << endl;
cout << "Сумма(char 'a', int '\\n')=" << sum('a','\n') << endl;
cout << "Сумма(long 3, long 70000)=" << sum(3l,70000) << endl;
cout << "Шаблоны(ф-ия максимума):" << endl;
cout << "Максимум(int 3, int 4)=" << max(3,4) << endl;
cout << "Максимум(char '3', char '4')=" << max('3','4') << endl;
cout << "Максимум(float 3.22, int 0.3)=" << max(3.22,0.3) << endl;
cout << "Функция с параметрами по умолчанию" << endl;
cout << "int summ(int a=1, int b=2, int c=3)" << endl;
cout << "summ()=" << summ() << endl;
cout << "sum(10)=" << summ(10) << endl;
cout << "summ(10, 11)=" << summ(10, 11) << endl;
cout << "sum(10, 11, 12)=" << summ(10, 11, 12) << endl;
cout << "Работа с классом Test" << endl;
Test a1(1), a2(2);
cout << "a1=" << a1 << endl << "a2=" << a2 << endl;
cout << "a1+a2=" << a1+a2 << endl;
cout << "a1++=" << a1++ << endl;
cout << "Работа с классом Test" << endl;
Test1 b1(1), b2(2);
cout << "b1=" << b1 << endl << "b2=" << b2 << endl;
cout << "b1+b2=" << b1+b2 << endl;
cout << "b1++=" << b1++ << endl;
}
-
lab5.hpp
template <class T>
T max(T x1, T x2)
{
if(x1>x2)
return x1;
else return x2;
}
int sum(int x1, int x2)
{
return x1+x2;
}
long sum(long x1, long x2)
{
return x1+x2;
}
char sum(char x1, char x2)
{
return x1+x2;
}
int summ(int a=1, int b=2, int c=3)
{
return a+b+c;
}
class _CLASSTYPE Test
{
public:
Test(int i=0) {inum=i;}
~Test() {}
Test operator+(const Test& rhs) ;
Test& operator++() { inum++; return *this;}
Test& operator++(int){ return operator++();}
friend ostream& operator<<(ostream& os, Test& obj);
private:
int inum;
};
Test Test::operator+(const Test& rhs)
{
Test tst(inum+rhs.inum);
return tst;
}
ostream& operator<<(ostream& os, Test& obj)
{
return os << obj.inum;
}
class _CLASSTYPE Test1
{
public:
Test1(int i=0) {inum=i;}
~Test1() {}
friend Test1 operator+(const Test1& lhs, const Test1& rhs) ;
friend Test1& operator++(Test1& obj);
friend Test1& operator++(Test1& obj, int);
friend ostream& operator<<(ostream& os, Test1& obj);
private:
int inum;
};
Test1& operator++(Test1& obj)
{
obj.inum++;
return obj;
}
Test1& operator++(Test1& obj, int)
{
return operator++(obj);
}
Test1 operator+(const Test1& lhs, const Test1& rhs)
{
Test1 tst(lhs.inum+rhs.inum);
return tst;
}
ostream& operator<<(ostream& os, Test1& obj)
{
return os << obj.inum;
}
4