русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Перетворення об’єктів у основні типи і навпаки


Дата додавання: 2014-04-22; переглядів: 1213.


Якщо нам потрібно здійснити перетворення визначених користувачем типів у основні типи, ми не можемо покластися на вбудовані функції, оскільки компілятору не відомо про визначені користувачем типи нічого, крім того, що ми самі йому повідомимо. Тому ми повинні самостійно написати функції для перетворення типів.

В наступному прикладі показано, як відбувається перетворення основного типу в тип, визначений користувачем. В цьому прикладі в якості визначеного користувачем типу ми будемо використовувати клас Distance з попередніх прикладів, а в якості основного типу – тип float, який ми використовували для змінної, що містить метри.

В прикладі (програма 10.13) приведені обидва варіанти: з Distance у float і навпаки.

#include <iostream.h>

#include <conio.h>

#include <bios.h>

#include<math.h>

class Distance

{private:

const float MTF; //коефіцієнт переведення

int feet;

float inches;

public:

Distance():feet(0),inches(0.0),MTF(3.280833F)

{}

Distance(float meters):MTF(3.280833F) //конструктор переведення дійсного

//числа в об’єкт

{float flcfeet=MTF*meters;

feet=int(flcfeet);

inches=12*(flcfeet-feet);

}

 

Distance (int ft,float in):feet(ft),inches(in),MTF(3.280833F)

{}

 

void getdist()

{cout<<"\nВведіть фути ";cin>>feet;

cout<<"\nдюйми ";cin>>inches;

}

 

void showdist() const

{cout <<feet << "\' "<< inches <<"\''";}

 

operator float()const //оператор переведення об’єкту в дійсне число

{float fracfeet=inches/12;

fracfeet+=float(feet);

return fracfeet/MTF;

}

};

////////////

int main()

{clrscr();

float mtrs;

Distance dist1=2.35F;//конструктор, що переводить метри в фути і дюйми

cout <<”\ndist1=”;dist1.showdist();

mtrs=(float)dist1; //оператор перетворення в метри

cout<<”\ndist1=”<<mtrs<<” meters\n”;

 

Distance dist2(5,10.25);

cout <<”\ndist2=”;dist2.showdist();

mtrs=dist2; //неявне перетворення типу

cout<<”\ndist2=”<<mtrs<<”meters\n”;

//dist2=mtrs; //помилковий вираз

bioskey(0);

return 0;

}

 

Програма 10.13

Для переходу від основного тпу – в нашому випадку float – до визначеного користувачем типу Distance ми використовуємо конструктор з одним аргументом. Його інколи називають конструктором перетворення. От як він виглядає в програмі 10.13

Distance(float meters):MTF(3.280833F) //конструктор переведення дійсного

//числа в об’єкт

{float flcfeet=MTF*meters;

feet=int(flcfeet);

inches=12*(flcfeet-feet);

}

Цей конструктор викликається, коли створюється об’єкт класу Distance з одним аргументом. Конструктор передбачає, що аргумент являє собою метри. Він перетворює аргумент в фути і дюйми і присвоює одержане значення об’єкту. Таким чином, перетворення з метрів у змінну типу Distance виконується разом зі створенням об’єкту в рядку:

Distance dist1=2.35F;

Для перетворення типу користувача в основний тип ми створили спеціальний оператор:

operator float()const //оператор переведення об’єкту в дійсне число

{float fracfeet=inches/12;

fracfeet+=float(feet);

return fracfeet/MTF;

}

Ця операція приймає значення об’єкту класу Distance, перетворює його значення у тип float і повертає це значення.

Операція може бути викликана явно:

mtrs=(float)dist1;

або за допомогою звичайного присвоювання

mtrs=dist2;

В обох випадках відбувається перетворення об’єкту типу Distance в еквівалентне значення типу float.

 


<== попередня лекція | наступна лекція ==>
Перетворення типів | Перетворення рядків в об’єкти класу String і навпаки


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн