Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
// 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;
}