![]() |
|
Программирование >> Расширенная версия языка c++
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 .
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |