#include <iostream>
using namespace std;

class Kilometers
{
   private:
    float kilometers;
   public:
    Kilometers(): kilometers(0) { }      
    Kilometers(float kilometers):kilometers(kilometers)
    {//cout<<"Kilometers: 1 arg constructor"<<endl; 
    }
    void display()
    {
         cout<<kilometers<<" kilometeres"<<endl;
    }
    float getValue()
    {
           return kilometers;
    }
    void operator=(float f1){   // km1 = ft;
       //cout<<"Kilometers: float to km"<<endl;    
       kilometers = f1;      
    }
    operator float (){
        //cout<<"Kilometers: km to float"<<endl;     
        return kilometers;         
    }
};
class Miles
{
   private:
    float miles;
   public:
    Miles(float miles) : miles(miles)
    {cout<<"Miles constructor 1"<<endl;}
    Miles(Kilometers kilometers)
    {
      cout<<"Miles: constructor with km arg"<<endl;               
      miles = kilometers.getValue()/1.61;
    }
    float getMiles()
    {
       cout << miles << "miles";
    }
    operator Kilometers()
    {
         cout<<"conversion function miles"<<endl;     
        return Kilometers(miles*1.61);
    }
    operator float(){
       return miles;
    }
    void display(){
        cout<<miles<<" miles"<<endl;     
    }
    void operator=(Kilometers km){
         cout<<"Miles operator()=(km)"<<endl;
         miles = km.getValue()/1.61;    
    }
};
int main()
{
    Kilometers k1(3);
    Miles m1(0);
    m1 = k1;  
    m1.display();
    system("pause");
}

