- •Математический факультет
- •Содержание
- •Virtual float Get_Price();//виртуальный метод получения цены 12
- •1. Постановка задачи
- •Delete p; delete k;
- •///Cup and spoon
- •Delete l;
- •Scanf("%d",&flag);
- •///Mug and spoon
- •Delete l;
- •Delete f; delete m;
- •///Common volume for mug and cup
- •Delete p; delete m;
- •///Mug and spoon and d_spoon
- •Delete q; delete l; delete m;
- •Delete Tab;
- •Delete X;
1. Постановка задачи
Описать предметную область, используя принципы ООП.
Для описания предметной области использовать иерархию классов, состоящую минимум из 3 классов.
Базовый класс должен быть абстрактным.
Поля классов должны быть закрытыми, динамическими и разных типов данных.
Для каждого класса иерархии описать методы:
Изменения значений полей классов
Получения значений полей класса
Минимум два метода, определяемые спецификой конкретного класса
Минимум один виртуальный метод (отдельный метод)
Для производных классов описать три разных конструктора и деструктор
Отдельно описать иерархию из двух классов, в которой одним из полей будет объект базового класса уже описанной иерархии. При создании объектов новой иерархии передавать объекты производных классов первой иерархии для инициализации поля - вложенного класса.
Использовать механизм позднего связывания: на стадии выполнения программы пользователь должен иметь возможность определять, какой объект нужно создать.
При выполнении программы должна демонстрироваться работа всех методов для созданного объекта.
2. Описание предметной области
Предметная область – обычная, кухонная посуда. Основная иерархия классов описывает чашки и кружки. Вторичная иерархия - ложки. В базе основной иерархии лежит абстрактный класс посуда, от которого унаследованы остальные. Классы вторичной иерархии включают поле базового класса основной иерархии.
3. Описание работы
3.1 Спецификации
3.1.1 Описание классов
class Crockery - класс посуда, абстрактный класс
class Cup - класс чашка, производный от класса Crockery
class Mug - класс кружка, производный от класса Crockery
class Spoon – класс ложка, отдельный класс
class D_Spoon-Узор на ложке, производный от класса Spoon
3.1.2 Описание методов классов
class Crockery
Crockery();-конструктор
virtual float Get_Price()=0;-виртуальный метод получения цены
virtual Crockery *Copy()=0;-виртуальный метод копирования
virtual ~Crockery();-виртуальный деструктор
class Cup
Cup(int,double,char,int&);//конструктор
Cup(double,char,int&);//конструктор
Cup(Cup*,int&);//конструктор копирования
~Cup(){printf("DESTRUCTOR CUP WORKED WELL\n"); delete colvo; delete rad; delete colCH;}//деструктор
virtual float Get_Price();//виртуальный метод получения цены
Crockery *Copy();//виртуальный метод копирования объекта
void Cup_Set(int,double,char);//изменение значений полей
void Cup_Get(int&,double&,char&);// получение значений полей
double Cup_Vol();//получение объема
char Cup_Color(){return (*colCH);}//получение цвета чашки
class Mug
Mug(int,float,char,int&);//конструктор
Mug(float,int&);//конструктор
Mug(Mug*,int&);//конструктор копирования
~Mug(){printf("DESTRUCTOR MUG WORKED WELL\n"); delete colvo; delete vol; delete colKR;}//деструктор
virtual float Get_Price();//виртуальный метод получения цены
Crockery *Copy();//виртуальный метод копирования объекта
void Mug_Get(int&,float&,char&);//получение значений полей
void Mug_Set(int,float,char);//изменение значений полей
float Mug_FPrice();//получение первой цены
double M_and_C_VOL(Cup*);//получение обема чашки и кружки когда они вместе
class Spoon
Spoon(Crockery* ,float,char,double,int&);//конструктор
~Spoon(){printf("DESTRUCTOR Spoon WORKED WELL\n");delete f; delete Len; delete colLJ; delete OC;}//деструктор
float Spoon_GetPrice(){return f->Get_Price()*((*Len)+(*OC));}//получение полной цены одной ложки
float Spoon_Plosh(){return (*Len)*(*OC);}//площадь ложки, для находения объема ложки с узором
class D_Spoon
D_Spoon(float,Crockery *,float,char,double,int &);//конструктор
~D_Spoon(){printf("DESTRUCTOR D_SPOON WORKED WELL\n");delete V;}//деструктор
float Finish_Price(Spoon* T){return T->Spoon_GetPrice()+Vol_Design(T);}//цена ложки с узором
float Vol_Design(Spoon* T){return T->Spoon_Plosh()+(*V);}//объем ложки с узором
3.2 Схема иерархии классов
3.3 Листинг программы
main.cpp
#include <stdlib.h>
#include <stdio.h>
#include "1.h"
int main()
{
int err,colvo,colvo2,flag;
char colKR,colCH;
double rad;
float k,vol;
int key=1;
Crockery * M;
while(key!=0)
{
printf("\n Please select the number \n");
printf("_________________________________________________ \n");
printf("| 1) MUG and SPOON |\n");
printf("| |\n");
printf("| 2) CUP and SPOON |\n");
printf("| |\n");
printf("| 3) CUP and SPOON and D_SPOON |\n");
printf("| |\n");
printf("| 4) MUG and SPOON and D_SPOON |\n");
printf("| |\n");
printf("| 5) COMMON VOLUME FOR MUG AND CUP |\n");
printf("| |\n");
printf("| 6) KONSTRUCTOR NUMBER 3 FOR CUP AND MUG |\n");
printf("| |\n");
printf("| 0 - EXIT |\n");
printf("|________________________________________________|\n");
printf("\n");
scanf("%d",&flag);
printf("\n");
///MUG and SPOON
if(flag==1)
{
M=new Mug(10,0.5,'Q',err);
k=M->Get_Price();
Spoon *L=new Spoon(M,10.0,'Y',7.5,err);
if(!err)
{
printf(" ________________________________________ \n");
printf(" | |\n");
printf(" | SPOON PRICE=%12f |\n",L->Spoon_GetPrice());
printf(" |________________________________________|\n\n");
delete L;
L=NULL;
}
Mug *F = new Mug(9,10.01,'R',err);
F->Mug_Set(5,4.6,'B');
F->Mug_Get(colvo,vol,colKR);
float a=F->Mug_FPrice();
printf(" ________________________________\n");
printf("| |\n");
printf("| FIRST_PRICE=%12f |\n",a);
printf("| COLVO=%12d |\n",colvo);
printf("| VOL= %12f |\n",vol);
printf("| COLOR=%12c |\n",colKR);
printf("|________________________________|\n\n");
printf(" _________________\n");
printf("| |\n");
printf("| %f |\n",k);
printf("|_________________|\n\n");
delete F;
delete M;
F=NULL;
M=NULL;
}
///COMMON VOLUME FOR MUG AND CUP
else if(flag == 5 )
{
Mug *K=new Mug(5.5,err);
Cup *P=new Cup(10.01,'Y',err);
printf(" _______________________________\n");
printf("| |\n");
printf("| COMMON VOLUME=%12f |\n",K->M_and_C_VOL(P));
printf("| |\n");
printf("| COLOR OF THE CUP: %12c|\n",P->Cup_Color());
printf("|_______________________________|\n\n");
delete P;
delete K;
}
///CUP and SPOON
else if(flag == 2 )
{
M=new Cup(10,5.5,'K',err);
k=M->Get_Price();
Spoon *L=new Spoon(M,10.0,'Y',7.5,err);
if(!err)
{
printf(" _______________________________________ \n");
printf(" | |\n");
printf(" | SPOON PRICE=%12f |\n",L->Spoon_GetPrice());
printf(" |_______________________________________|\n\n");
delete L;
L=NULL;
}
Cup *P=new Cup(10,1.5,'T',err);
P->Cup_Set(2,17.2,'N');
P->Cup_Get(colvo2,rad,colCH);
float a=P->Cup_Vol();
printf(" _______________________________\n");
printf("| |\n");
printf("| VOLUME OF CUP=%12f |\n",a);
printf("| COLVO=%12d |\n",colvo2);
printf("| VOL= %12f |\n",rad);
printf("| COLOR=%12c |\n",colCH);
printf("|_______________________________|\n\n");
printf(" ___________________\n");
printf("| |\n");
printf("| %12f |\n",k);
printf("|___________________|\n\n");
delete P;
delete M;
P=NULL;
M=NULL;
}
///MUG and SPOON and D_SPOON
if(flag==3)
{
M=new Cup(10,5.5,'K',err);
Spoon *L=new Spoon(M,10.0,'Y',7.5,err);
D_Spoon *Q=new D_Spoon(12.4,M,3.2,'B',8.3,err);
printf(" __________________________________________\n");
printf("| |\n");
printf("| RECEIVING AREA SPOONS: %12f |\n",Q->Spoon_Plosh());
printf("| |\n");
printf("| VOLUME DESIGN: %12f |\n",Q->Vol_Design(Q));
printf("| |\n");
printf("| SPOON GET PRICE: %12f |\n",Q->Spoon_GetPrice());
printf("| |\n");
printf("| FINISH PRICE SPOONS: %12f |\n",Q->Finish_Price(Q));
printf("|__________________________________________|\n\n");
delete Q;
delete L;
delete M;
Q=NULL;
L=NULL;
M=NULL;
}
if(flag==4)
{
M=new Mug(10,5.5,'B',err);
Spoon *L=new Spoon(M,10.0,'Y',7.5,err);
D_Spoon *Q=new D_Spoon(7.4,M,2.8,'B',5.6,err);
printf(" _________________________________________\n");
printf("| |\n");
printf("| RECEIVING AREA SPOONS: %12f |\n",Q->Spoon_Plosh());
printf("| |\n");
printf("| VOLUME DESIGN: %12f |\n",Q->Vol_Design(Q));
printf("| |\n");
printf("| SPOON GET PRICE: %12f |\n",Q->Spoon_GetPrice());
printf("| |\n");
printf("| FINISH PRICE SPOONS: %12f |\n",Q->Finish_Price(Q));
printf("|_________________________________________|\n\n");
delete Q;
delete L;
delete M;
Q=NULL;
L=NULL;
M=NULL;
}
///KONSTRUCTOR NUMBER 3 FOR CUP AND MUG
if(flag==6)
{
Cup *X;
X=new Cup(27,1.1,'R',err);
Cup *Tab=new Cup(X,err);
X->Cup_Get(colvo2,rad,colCH);
printf(" _______________________________\n");
printf("| |\n");
printf("| COLVO=%12d |\n",colvo2);
printf("| VOL= %12f |\n",rad);
printf("| COLOR=%12c |\n",colCH);
printf("|_______________________________|\n\n")
delete Tab;
Tab=NULL;
delete X;
X=NULL;
Mug *E=new Mug(15,40.56,'B',err);
Mug *Z=new Mug(E,err);
E->Mug_Get(colvo,vol,colKR);
printf(" ________________________________\n");
printf("| |\n");
printf("| COLVO=%12d |\n",colvo);
printf("| VOL= %12f |\n",vol);
printf("| COLOR=%12c |\n",colKR);
printf("|________________________________|\n\n");
//delete Z;
//Z=NULL;
delete E;
E=NULL;
}
///EXIT
if(flag==0)
{
key=0;
}
}
printf("KOSTROMIN D.A GROUP NUMBER M-113\n");
return 0;
}
1.CPP
#include <stdlib.h>
#include <stdio.h>
#include "1.h"
int main()
{
int err,colvo,colvo2,flag;
char colKR,colCH;
double rad;
float k,vol;
int key=1;
Crockery * M;
while(key!=0)
{
printf("\n Please select the number \n");
printf("_________________________________________________ \n");
printf("| 1) MUG and SPOON |\n");
printf("| |\n");
printf("| 2) CUP and SPOON |\n");
printf("| |\n");
printf("| 3) CUP and SPOON and D_SPOON |\n");
printf("| |\n");
printf("| 4) MUG and SPOON and D_SPOON |\n");
printf("| |\n");
printf("| 5) COMMON VOLUME FOR MUG AND CUP |\n");
printf("| |\n");
printf("| 6) KONSTRUCTOR NUMBER 3 FOR CUP AND MUG |\n");
printf("| |\n");
printf("| 0 - EXIT |\n");
printf("|________________________________________________|\n");
printf("\n");
