Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Progi / Lesson 7 / 2 / 7.2 С++

.txt
Скачиваний:
29
Добавлен:
28.03.2015
Размер:
4.1 Кб
Скачать
#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