Преобразование типов данных собственных в стандартные и наоборот...!!!
//------------------------------------------------------------------------------------------------
#include <iostream>
#include <conio.h>
using namespace std;
class Distance
{
private:
const float MTF;
int feet;
float inch;
public:
Distance(): feet(0), inch(0.0), MTF(3.280833F)
{}
Distance(float metr): MTF(3.280833F) //Сдесь мы создаем конструктор, который преобразует метры в объект Distance.
{
float temp_metr=metr*MTF; //Переводим в футы
feet=static_cast<int>(temp_metr); //Берем число полных футов
inch=12*(temp_metr-feet); //Остаток - это дюймы
}
Distance(int ft, float in): feet(ft), inch(in), MTF(3.280833F)
{}
void getset () //Организуем ввод значений полей объекта.
{
cout<<"\nEnter feet: "; cin>>feet;
cout<<"Enter inch: "; cin>>inch;
}
void display() const //Выводим на дисплей результат.
{cout<<endl<<feet<<" "<<inch;}
operator float() const //Сдесь мы пытаемся создать подобие перегрузки что-ли...
{
float metric = inch/12; //Переводим дюймы в футы
metric +=float(feet); //Добавляем целые футы
return metric/MTF; //Переводим в метры
}
};
////////////////////////////////////////////////////////
int main()
{
float mtr;
Distance eng1 = 12.4;
eng1.display();
mtr=float(eng1); //Или можно записать как: static_cast<float>(eng)
cout<<endl<<mtr;
Distance eng2;
eng2.getset();
mtr=eng2;
cout<<mtr;
Distance eng3 = mtr; //Перевод можно осуществлять только таким способом, при попытке
//сделать это при помощи выражения: eng3=mtr , компилятор выдаст ошибку...
eng3.display();
getch();
return 0;
}
//------------------------------------------------------------------------------------------------