Преобразование типов данных собственных в стандартные и наоборот...!!!

//------------------------------------------------------------------------------------------------
#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;
}

//------------------------------------------------------------------------------------------------

Хакинг | Главная | Программирование

Hosted by uCoz