Программирование >>  Расширенная версия языка c++ 

1 ... 126 127 128 [ 129 ] 130 131 132 ... 227


13.2. функции преобразования

Иногда бхвает полезно преобразовать объект одного типа в объект другого типа. Хотя для этого можно воспользоваться перегруженной оператор-функцией, часто более легким (и лучшим) способом такого преобразования является функция преобразования. Функция преобразования (conversion function) преобразует объект в значение, совместимое с другим типом дан-нгх, которгй часто является одним из встроеннгх типов даннгх С++. Уточним, функция преобразования автоматически преобразует объект в значение, совместимое с типом выражения, в котором этот объект используется.

Здесь показана основная форма функции преобразования:

operator тип о { return зиачвняв; } ., . . U)

Здесь тип - это целевой тип преобразования, а значение - это значение

объекта после выполнения преобразования. Функции преобразования возвращают значение типа тип. У функции преобразования не должно быть параметров, и она должна бгть членом класса, для которого выполняется

преобразование.

Как будет показано в примерах, обычно функция преобразования обеспечивает более ясный подход к преобразованию значения объекта в другой тип,

чем любой другой метод C++, поскольку она позволяет явно включить объект в выражение, содержащее переменные целевого типа.

В следующей программе класс coord содержит функцию преобразования, которая преобразует объект в целое. В данном случае функция возвращает произведение двух координат; однако в каждом конкретном случае допускается любое необходимое действие.

Простой пример функции преобразования ttinclude <iostream>

using namespace std;

2. Объясните назначение безымянного пространства имен.

3. Опишите различия между двумя формами инструкции using. -

4. Объясните, почему в подавляющее большинство программ данной книги

введена инструкция using. Приведите альтернативу ее использованию.

5. Объясните если вы создаете многократно используемый код, его желательно размещать в собственном пространстве имен.



394 Самоучитель C++

class coord { - . -iTH-..*i-r-. i

int X, y; ..... -ui-i-i , ,

public: .. .

coord{int i, in) { x j; }

operator into { return x*y; } функция преобразования

int (

int i;

ol; объек1 автоматически преобразуется в целое cout i \n;

,c ,.n-:-

100 ; объект о2 преобразуется в целое , cout i \n.;

return 0; --i-..... -y-:

В результате выполнения этой программы на экран будут выведены значения 6 и 112.

Обратите внимание, что функция преобразования вызьшается тогда, когда объект ol присваивается целому, а также когда объект о2 используется, как часть большого выражения, оперирующего с целыми. Как уже установлено, с помощью функции преобразования вы разрешаете вставлять объекты созданных вами классов в обычные выражения, без образования сложных цепочек перегруженных оператор-функций.

2. Следующим представлен другой пример функции преобразования. Здесь

преобразуется строка типа strtype в символьный указатель на str.

ttinclude <iostreain> .(

linclude <cstring> . . Цг ,.--л:.-

using namespace std; .f-.::-;: ,-i*.]: . i г .Jl: *-- .ft--;

class strtype {

char str[60];

int len; public:

strtype (char *s) y(str, s); len n{s); }

operator char *() { return str; } преобразование в тип char *

int mainO

{ ...

strtype 3 ( Это проверка\n ) ; rJ к

char *p, s2[a0];



return 0;

Эта программа выводит на экран следующее:

Это строка: Это проверка

Это копия строки: Это проверка

Как можно заметить, функция преобразования вызывается не только при присваивании объекта s объекту р (который имеет тип char *), но она также используется как параметр для функции strcpy(). Вспомните, функция strcpyO имеет следующий прототип:

cha (char *al, const char *s2) ; > i . : , ,

Поскольку прототип определяет, что объект s2 имеет тип char *, функция преобразования объекта в тип char * вызывается автоматически. Этот пример показывает, как функция преобразования может помочь интегрировать ваши

классы в библиотеку стандартных функций C++.

Упражнения

1. Используя класс из примера 2, создайте функцию преобразования для превращения строки в целое. Функция преобразования должна возвращать длину строки, хранящейся в str. Покажите, что ваша функция преобразования работает.

2. Пусть дан класс:

. t; -.( t . XlI .: --i-

clas pwr ( . . jj-ri.:.: . <

int base; i- J ; Г ir - :-:Jflvi 1

int exp; -- :I ?!X> public:

pwr (int b, int e) { base = b; exp = e; } . V

здесь создайте функцию преобразования в целое

, .....

3. Создайте функцию преобразования для превращения объекта тип г в целое. Функция должна возвращать результат возведения в степень

р = s; преобразование в тип char * ..ri-Ti 5-

cout Это строка: р \п;

при вызове функции преобразуется в тип char * * d strcpy{s2, s) ;

cout Это копия строки: s2 \n,- i .



1 ... 126 127 128 [ 129 ] 130 131 132 ... 227

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика