Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
#include "StdAfx.h"
#include <iostream>
#include <windows.h>
#include <string.h>
using namespace std;
class OBCH
{
public:
double Stoi(); // Вычесление стоимости
int GetVes();
double GetStoi();
//void Init(int m,float s); // задание начальных значений полей
OBCH(int m,double s);
OBCH();
protected:
int ves;
float sto;
};
int OBCH::GetVes(){
return ves;
}
double OBCH::GetStoi(){
return sto;
}
/*
void OBCH::Init(int v,float s)
{
ves=v;
sto=s;
}
*/
OBCH::OBCH() // конструктор без параметров
{
ves=0;
sto=0;
}
OBCH::OBCH(int m,double s) // конструктор с параметрами
{
ves=m;
sto=s;
}
double OBCH::Stoi()
{
return (ves*sto);
}
class Mebel: public OBCH
{
public:
char* GetNazvanie(); // возвращает строку с названием
void PutNazvanie(char *s); // задание Названия мебели
//OBCH Best(); // выбрать из трёх результатов лучший и вернуть
//void Init( char *f,int v1,float s1,int v2,float s2,int v3,float s3); // задание названия и значений ves,sto обеим результатам
double Stoi();
Mebel();
Mebel(int m,float s,int d);
private:
int dec;
char Nazvanie[30]; // Название
OBCH FirstRezult; // первый результат
OBCH SecondRezult; // второй результат
OBCH FreeRezult; // третий результат
};
Mebel::Mebel(){
}
Mebel::Mebel(int m,float s, int d):OBCH(m,s){
//strcpy_s(Nazvanie,f);
// FirstRezult:OBCH(m,s); // FirstRezult.ves=v1 FirstRezult.sto=s1
// SecondRezult:OBCH(m,s); // SecondRezult.ves=v2 SecondRezult.sto=s2
// FreeRezult:OBCH(m,s);
dec=d;
}
char* Mebel::GetNazvanie()
{
return Nazvanie;
}
void Mebel::PutNazvanie(char *s)
{
strcpy_s(Nazvanie,s);
}
double Mebel::Stoi(){
double k;
k=ves*sto;
if(k>=150)
return k-50;
}
class Runner // абстрактный класс для спортсменов
{
protected:
char Fam[30];
public:
Runner(char *f); // конструктор с параметрами
virtual double TotalStoi()=0; // чисто виртуальная функция - результат в сек.
};
Runner::Runner(char *f) // конструктор - определена только фамилия
{
strcpy(Fam,f);
}
class Stol:public Runner // один результат Record - длинная дистанция
{
protected:
OBCH Rezult; // 1 бег на длинную дистанцию
public:
Stol(char *f,int m,double s); // конструктор
double TotalStoi(); // перегрузка чисто виртуальной функции
};
Stol::Stol(char *f,int m,double s):Runner(f) // вызов базового конструктора
{
Rezult=OBCH(m,s);
}
double Stol::TotalStoi()
{
return Rezult.Stoi(); // 1 результат бега на длинную дистанцию
}
class Skaf:public Runner // один результат Sprint
{
protected:
Mebel Rezult; // 1 бег на короткую дистанцию
public:
Skaf(char *f,int m,double s,int d);
double TotalStoi(); // перегрузка чисто виртуальной функции
};
Skaf::Skaf(char *f,int m,double s,int d):Runner(f)
{
Rezult=Mebel(m,s,d);
}
double Skaf::TotalStoi()
{
return Rezult.Stoi(); // 1 результат бег на короткую дистанцию
}
class Combine:public Runner // 1 результат Record, 1 - Sprint
{
protected:
OBCH Rezult1; // 1 бег на длинную дистанцию
Mebel Rezult2; // 1 бег на короткую дистанцию
public:
Combine(char *f,int m1,int s1,int m2,int s2,int d);
double TotalStoi(); // перегрузка чисто виртуальной функции
};
Combine::Combine(char *f,int m1,int s1,int m2,int s2,int d):Runner(f)
{
Rezult1=OBCH(m1,s1);
Rezult2=Mebel(m2,s2,d);
}
double Combine::TotalStoi()
{
return Rezult1.Stoi()+Rezult2.Stoi();
// сумма бега на короткую и длинную дистанции
}
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "Russian"); /*setlocale( LC_CTYPE, ".1251" ); */
int m,n,k;
// Runner a; нельзя создать объект абстрактного класса
Stol b("Иванов",2,7);
Skaf c("Петров",2,7,8);
Combine d("Сидоров",2,7,2,7,8);
m=b.TotalStoi(); // m=127
n=c.TotalStoi(); // n=128 с округлением
k=d.TotalStoi(); // k=127+128=255
return 0;
system("pause");
return 0;
}
Соседние файлы в папке 2