rlab5 (Лабораторная работа №5)
Описание файла
Файл "rlab5" внутри архива находится в следующих папках: Лабораторная работа №5, лаба 5, 1. Документ из архива "Лабораторная работа №5", который расположен в категории "". Всё это находится в предмете "объектно-ориентированное программирование (ооп)" из 3 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "объектно-ориентированное программирование (ооп)" в общих файлах.
Онлайн просмотр документа "rlab5"
Текст из документа "rlab5"
6
Утверждаю: | |
Большаков С.А. | "__"_____________2007 г. |
Лабораторная работа №5
"Перегрузка функций и операций"
Отчет
(вид документа)
писчая бумага
(вид носителя)
6
(количество листов)
ИСПОЛНИТЕЛЬ: | |
студент группы ИУ5-54 | _____________________ |
Киреев И. А. | "__"_____________2007 г. |
Москва - 2007
________________________________________________________________
1. Цель работы
Целью лабораторной работы является изучение механизмов перегрузки функций и операций при объектно-ориентированном программировании на языке С++. Студенты должны освоить основные способы перегрузки и их особенности, продемонстрировать навыки и знания по перегрузке одноместных и двухместных операция и показать на примере простых собственных классов использование этих возможностей с помощью демонстрационного примера.
2. Содержание работы
В ЛР нужно выполнить следующее:
-
Перегрузку функций для простой функции
-
Изучить и продемонстрировать использование шаблонов функций
-
Продемонстрировать задание параметров функции по умолчанию в описании функции
-
Для нового класса (Test) перегрузку одноместной операции как внутренний метод (++)
-
Для нового класса (Test) перегрузку двуместной операции как внутренний метод (+)
-
Для нового класса (Test1) перегрузку одноместной операции как внешнюю функцию (как friend) (++)
-
Для нового класса (Test1)перегрузку двуместной операции как внешнюю функцию (как friend) (+)
-
Перегрузить операцию вывода переменной класса (<<) как внешнюю функцию (как friend) для ранее созданных классов (Test ,Test1)
Для выполнения лабораторной работы в полном объеме студенты должны выполнить следующие действия и пункты:
-
Перегрузку функций
-
Использование шаблонов функций
-
Задание параметров по умолчанию в прототипе и описании функции
-
Перегрузку одноместной операции внутреннюю (++)
-
Перегрузку двуместной операции внутреннюю (+)
-
Перегрузку одноместной операции внешнюю (++)
-
Перегрузку двуместной операции внешнюю (+)
-
Перегрузить операцию вывода переменной (<<) как внешнюю
-
Перегрузить операцию вывода переменной (<<) как внутреннюю
-
Создать и грамотно настроить проектный файл для программы ЛР
-
Отладить программу с помощью отладчика с просмотром объектов классов
-
Сформировать листинг программы и листинг результатов.
Оформить отчет по ЛР.
Требования к работе
В лабораторной работе в изложенном ниже порядке должны быть отражены следующие требования:
-
Описание классов и функций в отдельном файле (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.
Вариантные требования:
-
Перегрузка функций с двумя параметрами (1)
Функции вычитания (1.2)
-
Типы параметров и возврата для перегрузки функций(2)
char, long, double (2.3)
-
Демонстрация шаблонов – тип функции (3)
Функция определения максимума из двух (3.1)
-
Типы переменных в классе для выполнения перегрузок (4)
Тип char (4.3)
3. Листинги программ
3.1. lab51.cpp
#include <conio.h>
#include <iostream.h>
#include "lab5.hpp"
void Help( void );
void main( void )
{
//Заголовок
Help();
cout << "\nПерегрузка простых функций:\n";
char ca = 'P', cb = 10;
long la = 10, lb = 5;
double da = 3.14, db = 1.0;
cout << "char \t" << ca << " - " << short(cb) << " = " << Sub( ca, cb ) << endl;
cout << "long \t" << la << " - " << lb << " = " << Sub( la, lb ) << endl;
cout << "double \t" << da << " - " << db << " = " << Sub( da, db ) << endl;
(void)getch();
cout << "\nИспользование шаблона:\n";
cb = 'H';
cout << "char \tmax( " << ca << ", " << cb << " ) = " << Max( ca, cb ) << endl;
cout << "long \tmax( " << la << ", " << lb << " ) = " << Max( la, lb ) << endl;
cout << "double \tmax( " << da << ", " << db << " ) = " << Max( da, db ) << endl;
(void)getch();
cout << "\nПараметры по умолчанию:\n";
cb = 'H';
cout << "Summ( 1, 2, 3 ) = " << Summ( 1, 2, 3 ) << endl;
cout << " Summ( 4, 5 ) = " << Summ ( 4, 5 ) << endl;
cout << " Summ( 6 ) = " << Summ( 6 ) << endl;
cout << " Summ( ) = " << Summ() << endl;
(void)getch();
cout << "Перегрузка операторов:\n";
Test A('A');
cout << " A = " << A << endl;
cout << "A++ = " << A++ << endl;
cout << " A = " << A << endl;
cout << "++A = " << ++A << endl;
cout << " A = " << A << endl;
Test B1('A'), B2(2), B3(3);
cout << " B1 = " << B1 << endl;
cout << " B2 = " << int(B2) << endl;
cout << " B3 = " << int(B3) << endl;
cout << " B1 + B2 = " << B1 + B2 << endl;
cout << " B1 + B2 + B3 = " << B1 + B2 + B3 << endl;
Test1 C1('A'), C2(2), C3(3);
cout << " C1 = " << C1 << endl;
cout << " C2 = " << int(C2) << endl;
cout << " C3 = " << int(C3) << endl;
cout << " C1 + C2 = " << C1 + C2 << endl;
cout << " C1 + C2 + C3 = " << C1 + C2 + C3 << endl;
}
3.2. lab52.cpp
#include <iostream.h>
//Вывод справки
void Help( void )
{
cout << "\
ЛАБОРАТОРНАЯ РАБОТА №5\n\
КИРЕЕВ ИВАН ИУ5-64\n\
ВАРИАНТ 9\n\n";
}
3.3. lab5.hpp
char Sub( char x, char y )
{ return x - y;
}
long Sub( long x, long y )
{ return x - y;
}
double Sub( double x, double y )
{ return x - y;
}
template <class T>
T Max( T x, T y )
{ return ( x >= y ) ? x : y;
}
int Summ( int x1 = 0, int x2 = 0, int x3 = 0 )
{ return x1 + x2 + x3;
}
class Test
{
private:
char x;
public:
Test( int i ): x( i ) {};
Test( void ): x( 0 ) {};
Test& operator ++ ( )
{ x++;
return *this;
}
Test operator + ( Test& a)
{ Test T( x + a.x );
return T;
}
operator int ( )
{ return int(x);
}
friend ostream _FAR & operator << (ostream _FAR & out, Test& a )
{ return out << "'" << a.x << "'";
}
};
class Test1
{
private:
char x;
public:
Test1( int i ): x( i ) {};
Test1( void ): x( 0 ) {};
friend Test1& operator ++ ( Test1 & );
friend Test1 operator + ( Test1&, Test1& );
operator int ( )
{ return int(x);
}
friend ostream _FAR & operator << (ostream _FAR & out, Test1& a )
{ return out << "'" << a.x << "'";
}
};
Test1& operator ++ ( Test1 &a )
{ a.x++;
return a;
}
Test1 operator + ( Test1 &a, Test1& b )
{ Test1 T( a.x + b.x );
return T;
}
7. Результаты работы программы.
C:\Documents and Settings\Киреев>C:\A_WORKER\out\LAB5.EXE
ЛАБОРАТОРНАЯ РАБОТА ╣5
КИРЕЕВ ИВАН ИУ5-64
ВАРИАНТ 9
Перегрузка простых функций:
char P - 10 = F
long 10 - 5 = 5
double 3.14 - 1 = 2.14
Использование шаблона:
char max( P, H ) = P
long max( 10, 5 ) = 10
double max( 3.14, 1 ) = 3.14
Параметры по умолчанию:
Summ( 1, 2, 3 ) = 6
Summ( 4, 5 ) = 9
Summ( 6 ) = 6
Summ( ) = 0
Перегрузка операторов:
A = 'A'
A++ = 'B'
A = 'B'
++A = 'C'
A = 'C'
B1 = 'A'
B2 = 2
B3 = 3
B1 + B2 = 'C'
B1 + B2 + B3 = 'F'
C1 = 'A'
C2 = 2
C3 = 3
C1 + C2 = 'C'
C1 + C2 + C3 = 'F'
C:\DOCUME~1\AD2E~1>