Практическое занятие № 15
Тема: перегрузка операций в классах
Цель: получить практические навыки по перегрузке операций для работы с классами в программах на С++
Ход работы
Пусть имеется некоторый объект "груз", описываемый свойствами: длина, ширина и высота. Опишите класс для работы с данным объектом.
Класс должен иметь конструктор с параметрами по умолчанию, конструктор входными параметрами, а также методы ввода параметров класса, вывода параметров класса и нахождения объема груза.
Выполните перегрузку нескольких операций для класса:
- операция ">" для сравнения объемов двух грузов между собой;
- операция "+" для сложения объемов двух грузо;
- операция "++" для увеличения всех сторон груза на 1;
- операция "*" для умножения всех сторон груза на заданное целое число.
В главной программе опишите два экземпляра грузов: один со значениями по умолчанию, второй - с помощью параметров.
Выведите размеры грузов на экран. Определите, какой из них имеет больший объем.
Увеличьте параметры первого груза в 5 раз. Выведите новые размеры грузов на экран и еще раз определите какой из грузов имеет больший объем.
Введите с клавиатуры новые размеры второго груза. Примените к нему дважды операцию инкремента и выведите его новый размер на экран.
Определите объемы каждого груза, а также их. суммарный объем. При нахождении суммарного объема используйте два способа:
- суммируя объемы каждого груза;
- используя перегруженную операцию "+".
Указания:
#include <iostream.h>
#include <string.h>
//описываем класс "груз"
class gruz
{
public:
//поля класса: длина, ширина и высота
float dlina, shirina, vysota;
//конструктор со значениями по умолчанию
gruz() {dlina=1; shirina=1; vysota=1;}
//конструктор с входными параметрами
gruz(float d, float s, float v)
{
dlina=d;
shirina=s;
vysota=v;
}
//метод ввода параметров класса
void set()
{
cout<<"- длина:
"; cin>>dlina;
cout<<"- ширина: "; cin>>shirina;
cout<<"- высота: "; cin>>vysota;
}
//метод вывода параметров класса
void show()
{
cout<<"Размер:
"<<dlina<<"x"<<shirina<<"x"<<vysota<<"\n";
}
//метод расчета объема
float volume()
{
return dlina*shirina*vysota;
}
//переопределяем оператор "больше"
int operator> (gruz g) const
{
//если объем первого груза больше или равен объему второго
if (volume()>=g.volume())
//метод возвращает 1 (true)
return 1;
//в противном случае
else
//метод возвращает 0 (false)
return 0;
}
//перегружаем операцию сложения,
//которая суммирует объемы грузов
float operator+ (gruz g) const
{
return volume()+g.volume();
}
//перегружаем операцию инкремента,
//которая увеличивает на 1 все стороны груза
gruz operator++ ()
{
dlina++;
shirina++;
vysota++;
}
//перегружаем операцию умножения,
//которая увеличивает все стороны груза в заданное количество раз
gruz operator* (int a)
{
//описываем переменные
float d,v,s;
//в каждую переменную записываем увеличенное значение стороны
d=dlina*a;
s=shirina*a;
v=vysota*a;
//возвращаем контсруктор, в который в качестве параметров
//передаются найденные значения сторон
return gruz(d,s,v);
}
}; //конец описания класса
//главная программа
int main()
{
system("chcp 1251>nul");
//переменная для груза с параметрами по умолчанию
gruz gr1;
//переменная для груза с заданными параметрами
gruz gr2(5,4,6);
system("cls");
//выводим параметры обоих грузов
cout<<"Исходные данные:\n";
cout<<"- первый груз: "; gr1.show();
cout<<"- второй груз: "; gr2.show();
//выводим номер груза с наибольшим объемом
if (gr1>gr2)
cout<<"Наибольший объем у первого груза\n";
else
cout<<"Наибольший объем у второго груза\n";
cout<<"==========================================\n";
//увеличим параметры первого груза в 5 раз
gr1=gr1*5;
//выводим новые параметры обоих грузов
cout<<"После увеличения первого груза в 5 раз:\n";
cout<<"- первый груз: "; gr1.show();
cout<<"- второй груз: "; gr2.show();
//выводим номер груза с наибольшим объемом
if (gr1>gr2)
cout<<"Наибольший объем у первого груза\n";
else
cout<<"Наибольший объем у второго груза\n";
cout<<"==========================================\n";
//вводим новые параметры второго груза
cout<<"Введите новые данные о втором грузе:\n";
gr2.set();
//выполним для второго груза дважды операцию инкремента
gr2++;
gr2++;
//выведем параметры второго груза на экран
cout<<"После двух инкрементов груз имеет размеры: ";
gr2.show();
cout<<"==========================================\n";
//найдем общий объем двух грузов
cout<<"Объем первого груза="<<gr1.volume()<<"\n";
cout<<"Объем второго груза="<<gr2.volume()<<"\n";
cout<<"Общий объем грузов(первый способ)="<<gr1.volume()+gr2.volume()<<"\n";
cout<<"Общий объем грузов(второй, более естественный способ)="<<gr1+gr2<<"\n";
system("pause");
}