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

Progi / Lesson 7 / 1 / 7

.2.txt
Скачиваний:
29
Добавлен:
28.03.2015
Размер:
2.83 Кб
Скачать
// laba1.cpp: определяет точку входа для консольного приложения.
//

#include "StdAfx.h"
#include <iostream>
#include <windows.h>

using namespace std;


class Drobi
 {
 public:
  int Getchis();         
  int Getznam(); 
  virtual double Numberdec();
  bool qualification();
  
 // void Init(int m,int s);
  Drobi(int m,int s); 
  void Read();
  void Display();

  Drobi sloj(Drobi a,Drobi b);
 protected:
  int    chis;
   int    znam;

 };


/*
void Drobi::Init(int m,int s)
{
 chis=m;
 znam=s;
}*/

Drobi::Drobi(int m,int s)
{
  chis=m;
  znam=s;
}


int Drobi::Getchis()
{
 return chis;
}

int Drobi::Getznam()
{
  return znam;
}

double Drobi::Numberdec()
 {
	double n;
	int k;
	k=chis/znam;
	n=(1.0*chis/znam);
	
  return n-k;
}

bool Drobi::qualification()
{
	int k;
	k=Numberdec(); // результат в секундах
	return k*9; // выполнил
}


Drobi Drobi::sloj(Drobi a,Drobi b)
{
  Drobi c(chis,znam);         
  с.chis=a.chis*b.znam + a.znam*b.chis;
  с.znam=a.znam*b.znam;
  return c;
}

void Drobi::Read()
{
  cin>>chis>>znam;
}

void Drobi::Display()
{
 // cout<<chis<<znam;
	printf("\n%d/%d\n", chis, znam);
}



class Okr:public Drobi
{

public:
 // новые методы Sprint
 void Putdec(int d);
 double Numberdec();
// void Init(int m,int s, int d);
 Okr(int m,int s,int d); 
private:
 int dec;
};
/*
void Okr::Init(int m, int s, int d)
{
	Drobi::Init(m,s);
	dec=d;
}*/

Okr::Okr(int m,int s,int d):Drobi(m,s)
{
 dec=d;
}



void Okr::Putdec(int d)
{
 dec=d;
}

double Okr::Numberdec()
{
 	double n;
	int k,k1;
	k=chis/znam;
	n=(1.0*chis/znam);
	k1=n-k;
 if(k1>=0.5)
 return k1+dec;
 else 
	 return k;
}

int main()
{

 setlocale(LC_ALL, "Russian"); /*setlocale( LC_CTYPE, ".1251" ); */
      

 /*int m,s;
 double k;
 Drobi x,y,z;
 x.Read();
 y.Init(4,5);
 k=x.Dell();
 printf("%.2f\n", k);

 Okr g;
 double g1,g2;
 g.Init(1,8);
 g.Putdec(0.5);
 g1=g.Numberdec();
 g2=g.Dell();


 z=z.sloj(x,y);
 z.Display();
 m=z.Getchis();
 s=z.Getznam();
 cout<<endl;
 */

 Drobi x(4,5);
 Okr y(1,8,2);
 double p,p1; bool t,t1;
 t=x.qualification(); // true
 t1=y.qualification(); //Virtual - false вызвал метод из производного. При double numberdec вызвал метод из базового класса


 double Pr,n;
 Drobi *c,*d; // указатели на базовый класс
 Okr *e;        // указатель на производный класс
 c=new Drobi(2,7);
 e=new Okr(2,7,8);
 cout<<"Введите признак"<<endl;
 cin>>Pr;     // ввод признака с консоли
 if(Pr==0)
 {
  d=c; // указателю объекта базового класса присваивается базовый
 }
 else
 {
  d=e;    // присваивание указателя объекта базового класса указателя производного
 }
 n=d->Numberdec();



   system("pause");
	  return 0;
   
}

Соседние файлы в папке 1