Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- class Distance
- {
- private:
- const float MTF;
- int feet;
- float inches;
- public:
- int get_feet()const{return feet;}
- float get_inches()const{return inches;}
- Distance():
- feet(0),
- inches(0.0),
- MTF(3.280833F)
- {}
- Distance(int ft, float inc ):
- feet(ft),
- inches(inc),
- MTF(3.280833F)
- {}
- void get_distance()
- {
- cout << "write feets: \n";
- cin >> feet;
- cout << "write inches: \n";
- cin >> inches;
- }
- void show_distance()
- {
- cout << feet << "\'" << inches << '\"'<<endl;
- }
- void show_distance_mtrs(Distance d)
- {
- cout<<static_cast<float>(d)<<"mtrs"<<endl;
- }
- operator float() const
- {
- float fracfeet = inches / 12;
- fracfeet += static_cast<float>(feet);
- return fracfeet / MTF;
- }
- ~Distance() {}
- };
- class Derived_Distance:public Distance
- {
- private:
- int feet;
- float inches;
- public:
- Distance operator+(Distance d2) const
- {
- int f = feet + d2.get_feet();
- float i = inches + d2.get_inches();
- if (i >=12.0){
- i -= 12.0;
- f++;
- }
- return Distance(f,i);
- }
- Distance operator-(Distance d2) const
- {
- if ( (d2.get_feet()>feet) || ( (d2.get_feet()==feet) && (d2.get_inches()>inches) ) ){
- cout<<"subtraction is not possible"<<endl;
- return Distance(0,0);
- }
- else
- {
- int f = feet - d2.get_feet();
- float i=0;
- if (d2.get_inches() > inches){
- i += 12.0;
- f--;
- }
- i = i+inches - d2.get_inches();
- return Distance(f,i);
- }
- }
- Distance operator*(int a)
- {
- inches=inches+feet*12;
- feet=0;
- while(inches>=12){
- inches -= 12.0;
- feet++;
- }
- return Distance(feet,inches);
- }
- Distance operator/(int a)
- {
- inches=inches+feet*12;
- feet=0;
- inches=inches/2;
- while(inches>=12){
- inches -= 12.0;
- feet++;
- }
- return Distance(feet,inches);
- }
- void operator+=(Distance d2)
- {
- feet += d2.get_feet();
- inches += d2.get_inches();
- if (inches >=12.0){
- inches -= 12.0;
- feet++;
- }
- }
- void operator-=(Distance d2)
- {
- if ((d2.get_feet()>feet) || ((d2.get_feet()==feet)&&(d2.get_inches()>inches))){
- cout<<"subtraction is not possible"<<endl;
- }
- else
- {
- feet -= d2.get_feet();
- if (inches<d2.get_inches()){
- feet--;
- inches+=12;
- }
- inches -= d2.get_inches();
- }
- }
- void operator*=(int a)
- {
- inches=inches+feet*12;
- feet=0;
- inches=inches*a;
- while(inches>=12){
- inches -= 12.0;
- feet++;
- }
- }
- void operator/=(int a)
- {
- inches=inches+feet*12;
- feet=0;
- inches=inches/a;
- while(inches>=12){
- inches -= 12.0;
- feet++;
- }
- }
- bool operator<( Distance d2 )
- {
- float all_feet_1 = feet + inches / 12;
- float all_feet_2 = d2.get_feet() + d2.get_feet() / 12;
- return (all_feet_1 < all_feet_2) ? true : false;
- }
- bool operator>( Distance d2 )
- {
- float all_feet_1 = feet + inches / 12;
- float all_feet_2 = d2.get_feet() + d2.get_feet() / 12;
- return (all_feet_1 > all_feet_2) ? true : false;
- }
- bool operator<=( Distance d2 )
- {
- float all_feet_1 = feet + inches / 12;
- float all_feet_2 = d2.get_feet() + d2.get_feet() / 12;
- return (all_feet_1 <= all_feet_2) ? true : false;
- }
- bool operator>=( Distance d2 )
- {
- float all_feet_1 = feet + inches / 12;
- float all_feet_2 = d2.get_feet() + d2.get_feet() / 12;
- return (all_feet_1 >= all_feet_2) ? true : false;
- }
- bool operator==( Distance d2 )
- {
- float all_feet_1 = feet + inches / 12;
- float all_feet_2 = d2.get_feet() + d2.get_feet() / 12;
- return (all_feet_1 == all_feet_2) ? true : false;
- }
- bool operator!=( Distance d2 )
- {
- float all_feet_1 = feet + inches / 12;
- float all_feet_2 = d2.get_feet() + d2.get_feet() / 12;
- return (all_feet_1 != all_feet_2) ? true : false;
- }
- };
- int main()
- {
- Derived_Distance x;
- Derived_Distance y;
- x.get_distance();
- x.show_distance();
- y.get_distance();
- y.show_distance();
- x-=y;
- x.show_distance();
- x.show_distance_mtrs(x);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment