ооп 5 (Лабораторная работа №5)
Описание файла
Файл "ооп 5" внутри архива находится в папке "Лабораторная работа №5". Документ из архива "Лабораторная работа №5", который расположен в категории "". Всё это находится в предмете "объектно-ориентированное программирование (ооп)" из 3 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "объектно-ориентированное программирование (ооп)" в общих файлах.
Онлайн просмотр документа "ооп 5"
Текст из документа "ооп 5"
Московский Государственный Технический Университет имени Н. Э. Баумана
Отчет к лабораторной работе №5
“ Перегрузка функций и операций ”
Работу выполнила студентка группы ИУ-5-31
Черненькая И.С.
Работу проверил преподаватель
Гапанюк Ю.Е.
Москва
2009
Цель работы
Целью лабораторной работы является изучение механизмов перегрузки функций и операций при объектно-ориентированном программировании на языке С++. Студенты должны освоить основные способы перегрузки и их особенности, продемонстрировать навыки и знания по перегрузке одноместных и двухместных операция и показать на примере простых собственных классов использование этих возможностей с помощью демонстрационного примера.
Порядок выполнения работы
-
Перегрузку функций
-
Использование шаблонов функций
-
Задание параметров по умолчанию в прототипе и описании функции
-
Перегрузку одноместной операции внутреннюю (++)
-
Перегрузку двуместной операции внутреннюю (+)
-
Перегрузку одноместной операции внешнюю (++)
-
Перегрузку двуместной операции внешнюю (+)
-
Перегрузить операцию вывода переменной (<<) как внешнюю
-
Перегрузить операцию вывода переменной (<<) как внутреннюю
-
Создать и грамотно настроить проектный файл для программы ЛР
-
Отладить программу с помощью отладчика с просмотром объектов классов
-
Сформировать листинг программы и листинг результатов.
-
Оформить отчет по ЛР.
Требования к работе
-
Описание классов и функций в отдельном файле (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.
Текст программы
“lab5_1.cpp”
#include <iostream.h>
#include <conio.h>
#include "lab5_3.hpp"
Vyvod();
void main()
{
Vyvod();
long l_a = 123456789, l_b = 987654321;
double d_a = 123.456789, d_b = 987.654321;
float f_a = 123.4, f_b = 987.6;
cout << "Сумма для long: " << Summa(l_a, l_b) << endl;
cout << "Сумма для double: " << Summa(d_a, d_b) << endl;
cout << "Сумма для float: " << Summa(f_a, f_b) << endl << endl;
cout << "Максимум из long: " << Maximum(l_a, l_b) << endl;
cout << "Максимум из double: " << Maximum(d_a, d_b) << endl;
cout << "Максимум из float: " << Maximum(f_a, f_b) << endl << endl;
cout << "Функция сложения: без параметров = " << Summ() << endl;
cout << "Функция сложения: 1 параметр (4) = " << Summ(4) << endl;
cout << "Функция сложения: 2 параметра (4, 7) = " << Summ(4,7) << endl;
cout << "Функция сложения: 3 параметра (4, 7, 13) = " << Summ(4, 7, 13) << endl << endl;
Test prm(666);
cout << "Проверка ++: " << prm++ << endl;
cout << "Проверка +: " << (prm+13) << endl;
cout << "Вывод переменной еще раз: " << prm << endl << endl;
Test1 prmn(133);
cout << "Проверка ++: " << prmn++ << endl;
cout << "Проверка +: " << (prmn+13) << endl;
cout << "Вывод переменной еще раз: " << prmn << endl << endl;
}
“lab5_2.cpp”
#include <iostream.h>
void Vyvod()
cout << "Черненькая Ирина, ИУ5-31 \nВариант №30\n\n";
“lab5_3.hpp”
long Summa(long a, long b)
{ return (a+b);}
double Summa(double a, double b)
{ return (a+b);}
float Summa(float a, float b)
{ return (a+b);}
template <class Tmplt>
Tmplt Maximum( Tmplt x, Tmplt y )
{ return ( x >= y ) ? x : y;
}
int Summ(int a=0, int b=0, int c=0)
{ return (a+b+c);}
class Test
{
int Zutt;
public:
Test (int pom)
{ Zutt = pom;}
int operator ++()
{ Zutt++;
return (Zutt);
}
int operator +(int per)
{ int promg;
promg = Zutt + per;
return promg;
}
friend ostream& operator << (ostream& out, Test pom)
{ out << pom.Zutt << " !!!))";}
};
class Test1
{
int Zut;
public:
Test1(int per)
{ Zut = per;}
Test1()
{ Zut = 0;}
friend int operator ++(Test1& per);
friend int operator +(Test1& per, Test1& pom);
friend ostream& operator << (ostream& out, Test1 pom);
};
int operator ++ (Test1& per)
{ per.Zut++;
return per.Zut;
}
int operator +(Test1& per, Test1& pom)
{ int prom;
prom = per.Zut + pom.Zut;
return prom;
}
ostream& operator << (ostream& out, Test1 pom)
{ out << pom.Zut << " !!!))";}
Результаты работы
5