русс | укр

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

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


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


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


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


Розглянемо інший приклад, в якому використані конструктор з одним аргументом і оператор перетворення. тут використовується клас String, з яким вже раніше працювали у програмі 10.8.

Далі приведено лістінг програми 10.10.

#include <iostream.h>

#include <conio.h>

#include <bios.h>

#include <string.h>

#include <stdlib.h>

class String //Клас для рядків

{private:

enum {SZ=80}; // max для рядків

char str[SZ]; //масив для рядків

public:

String () //конструктор без параметра

{str[0]=’\x0’;}

 

String(char s[])

{strcpy(str,s);}

 

void display() const

{cout <<str;}

void getstr()

{cin.get(str,SZ);}

 

//operator

operator char*( );

};

String::operator char*()

{return str;}

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

int main()

{clrscr();

String s1;

char xstr[]=”Звичайний рядок “;

s1=xstr; //неявний конструктор з 1 параметром

s1.display();

String s2=”Інший рядок”; //конструктор з параметром;

cout<<endl<<(char*)s2;

cout<<endl;

bioskey(0);

return 0;

}

Програма 10.14

 

Конструктор з одним аргументом перетворює звичайний рядок (масив елементів типу char) в об’єкт класу String:

String(char s[])

{strcpy(str,s);}

Рядок передається в якості аргументу і коміюється у змінну str новоствореного об’єкту класу String, використовуючи бібліотечну функцію strcpy(). Це перетворення буде використовуватися, коли створюється об’єкт класу String:

String s2=”Інший рядок”;

або буде використовуватися у виразі присвоювання

s1=xstr;

де s1 - об’єкт класу String, а змінна xstr – просто рядок.

Операція перетворення використовується для перетворення об’єкту класу String у рядок:

String::operator char*()

{return str;}

Зірочка в цьому виразі означає вказівник на. Це інший спосіб оголошення змінної рядкового типу.

Оператор перетворення використовується компілятором у рядку

cout<<endl<<(char*)s2;

Тут s2 – змінна, що використовується як аргумент для перезавантаженої операції <<. Оскільки операції << нічого не відомо про визначений користувачем тип String, то компілятор намагатиметься перетворити змінну s2 на один з відомих йому типів. Ми визначимо тип, до якого хочемо перетворити змінну, за допомогою оператора (char*)s2 Оператор шукає перетворення від типу String до рядкового типу, і, знайшовши нашу функцію char*(), виконує її для генерації рядка, який потім буде виведений через операцію <<. Метод display стає зайвим і може бути видаленим.

Програма 10.14 демонструє, що перетворення типів відбувається автоматично не лише у виразах присвоювання, але і в інших підходящих місцях, таких як пересилання аргументів операціям (наприклад, <<) чи функціям. При передачі в операцію чи функцію аргументу неправильного типу, вони перетворюють його до прийнятного типу, якщо ми визначили таке перетворення.

Зауважимо, що ми не можемо використовувати явний вираз присвоювання для перетворення об’єкту класу String до змінної рядкового типу.

xstr=s2;

оскільки xstr є масивом. Щоб щось йому присвоїти, нам потрібно перезавантажити операцію присвоєння.

 


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


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