OOP / Лаб 2
.docxМинистерство образования и науки Украины
Одесский национальный политехнический университет
Кафедра системного программного обеспечения.
Протокол лабораторной работы № 2
По дисциплине:
Объектно-ориентированное программирование
Вариант 10
Выполнил
студент AC-121
Куценко Дмитрий Сергеевич
Преподаватель Кунгурцев О. Б.
Одесса 2013 (год)
Лабораторная работа №2 „Наследование. Язык С++”
Исходные данные для лабораторной работы
Используютcя исходные данные для лабораторной работы №1. Кроме этого, используются дополнительные характеристики прибора, приведенные в таблице 2.
Таблица 1. Характеристики приборов, реализуемые в варианте задания.
№ варианта |
Характеристики прибора |
10 |
1,3,8 |
1.Наименование прибора.
-
Габариты: длина, высота, ширина.
-
Вес.
-
Стоимость.
-
Гарантийный срок.
-
Диапазон температур: tmin, tmax.
-
Источник питания: напряжение, ток, частота.
-
Измерения. Имеется несколько измеряемых величин. Каждая характеризуется:
названием измеряемой величины;
нижним пределом;
верхним пределом;
погрешностью.
-
Покупные изделия. Имеется несколько покупных изделий. Каждое характеризуется:
названием;
количеством;
названием поставщика
-
Заказчик. Имеется несколько заказчиков. Каждый характеризуется:
Наименованием;
адресом;
количеством заказанных приборов.
Таблица 2. Дополнительные характеристики приборов.
№ варианта |
Дополнительные характеристики прибора |
10 |
4 |
Выполнение лабораторной работы
-
Создать иерархию из трёх классов (Абстрактный ←Класс1←Класс2). Характеристики прибора из таблицы 1 реализуются в классах Абстрактный и Класс1.
-
Характеристики прибора из таблицы 2 реализуются в Класс2.
-
Определить виртуальную функцию в Абстрактном классе.
-
Реализовать абстрактные функции для объектов Класса1 и Класса2.
-
Продемонстрировать работу с объектами разных классов и использование виртуальных функций.
Код программы
#include <iostream>
#include <string>
#include <locale>
using namespace std;
class Abstract
{
protected:
string name; float niz,verx; int pogr; float ves;
public:
Abstract( string prib_name,float prib_niz, float prib_verx,int pogr_prib,float ves_prib)
{
Abstract::name= prib_name;
Abstract::niz = prib_niz;
Abstract::verx = prib_verx;
Abstract::pogr= pogr_prib;
Abstract::ves= ves_prib;
}
virtual void getIn()=0;
virtual void setIn()=0;
};
class Klass1 : public Abstract
{
public:
Klass1(string prib_name,float prib_niz, float prib_verx,int pogr_prib,float ves_prib):
Abstract(prib_name,prib_niz, prib_verx,pogr_prib,ves_prib){}
void getIn()
{
setlocale( LC_ALL,"Russian" );
cout<<"Название товара:"<<"|*|"<<name<<"Нижний придел:"<<niz<<"|*|"<<"Верхний придел:"<<verx<<"|*|"<<"Погрешность:"<<pogr<<"Вес:"<<ves<<"Цена:";
}
virtual void setIn()
{ setlocale( LC_ALL,"Russian" );
cout<<"Название товара: "; cin>>name;
cout<<"Нижний придел: "; cin>>niz;
cout<<"Верхний придел: "; cin>>verx;
cout<<"Погрешность: "; cin>>pogr;
cout<<"Вес: "; cin>>ves;
cout<<"Цена ";
}
};
class Klass2 : public Klass1
{
protected:
float cena;
public:
Klass2(float cena_prib,string prib_name,float prib_niz, float prib_verx,int pogr_prib,float ves_prib):
Klass1(prib_name,prib_niz,prib_verx, pogr_prib, ves_prib)
{
cena=cena_prib;
}
void getIn()
{
setlocale( LC_ALL,"Russian" );
cout<<"\n============================================================\n";
cout<<"Название товара:"<<name<<"|*|"<<"Нижний придел:"<<niz<<"|*|"<<"Верхний придел:"<<verx<<"|*|"<<"Погрешность:"<<pogr<<"Вес:"<<ves<<"Цена:"<<cena;
}
virtual void setIn()
{ setlocale( LC_ALL,"Russian" );
cout<<"Название товара: "; cin>>name;
cout<<"Нижний придел: "; cin>>niz;
cout<<"Верхний придел: "; cin>>verx;
cout<<"Погрешность: "; cin>>pogr;
cout<<"Вес: "; cin>>ves;
cout<<"Цена "; cin>>cena;
}
};
void main()
{
setlocale( LC_ALL,"Russian" );
string name; float ves,cena; int n;float niz; float verx; int pogr;
cout<<"Введите количество приборов:\n";
cin>>n;
Abstract *Pribors[50];// массив ссылок приборы
for (int i = 0; i < n; i ++)
{
cout<<"Прибор № "<<1+i<<endl;
Pribors[i] = new Klass2(cena,name,niz,verx, pogr, ves);
Pribors[i]->setIn();
}
for (int i = 0; i < n; i ++)
{
Pribors[i]->getIn();//вывод информации
}
}