τελική άσκηση με την Distance
#include <iostream.h>
#include <fstream.h>
#include <string>
const float MTF=3.280833;
class DistanceXptn {
public:
enum {la9ospodia,la9osinches};
DistanceXptn (std::string onoma, int eidos, int v)
{
onomame9odou=onoma;
kwdla9ous=eidos;
la9timi=v;
}
std::string getOnoma ()const
{
return onomame9odou;
}
int getkwdiko ()const
{
return kwdla9ous;
}
int getla9timi() const
{
return la9timi;
}
private:
std::string onomame9odou;
int kwdla9ous;
int la9timi;
};
class Distance{
private:
int feet;
float inches;
public:
Distance(int nFeet, float nInches)
{
if (nFeet<0)
throw DistanceXptn("Distance",DistanceXptn::la9ospodia,nFeet);
if(nInches<0||nInches>12)
throw DistanceXptn("Distance",DistanceXptn::la9osinches,nInches);
feet=nFeet;
inches=nInches;
}
void write (ofstream& outbin)const
{
outbin.write(reinterpret_cast<const char*>(this), sizeof(Distance));
}
void read (ifstream& inbin)
{
inbin.read(reinterpret_cast< char*>(this), sizeof(Distance));
}
Distance()
{
feet=0;
inches=0;
}
void setFoot(int nFeet)
{
if(nFeet<0)
throw DistanceXptn("setFoot",DistanceXptn::la9ospodia,nFeet);
else
feet=nFeet;
}
int showFeet()
{
return feet;
}
void setInches(float nInches)
{
if(nInches<=0||nInches>12.0)
throw DistanceXptn("setInches",DistanceXptn::la9osinches,nInches);
else
inches=nInches;
}
float showInches()
{
return inches;
}
Distance operator + (Distance d)
{
int f=feet+d.feet;
float i=inches+d.inches;
if (i>=12.0)
{
i-=12.0;
f++;
}
return Distance(f,i);
}
operator float()
{
float fracFeet=inches/12;
fracFeet+=float(feet);
return fracFeet/MTF;
}
Distance(float meters)
{
float fltFeet=MTF*meters;
feet=int(fltFeet);
inches=12*(fltFeet-feet);
}
};
int main()
{
Distance d,dist[10];
int i=0;
ifstream inFile;
inFile.open("dataDis.dta");
d.read(inFile);
while (!inFile.eof())
{
try
{
dist[i]=d;
i++;
d.read(inFile);
}
catch(DistanceXptn x)
{
switch (x.getkwdiko())
{
case DistanceXptn::la9ospodia:
cout<<"lathos podia-->"<<x.getOnoma()<<":"<<x.getla9timi()<<endl;
break;
case DistanceXptn::la9osinches:
cout<<"lathos inches stin-->"<<x.getOnoma()<<":"<<x.getla9timi()<<endl;
break;
default:
cout<<"mi anamenomeni exeresi apo antikimeno tis klasis Distance";endl;
}
d.read(inFile);
}
}
inFile.close();
int XXX;
cout<<"telos programmatos";
cin>>XXX;
return 0;
}
|