operator type() {return value;}
Здесь элемент type — новый тип, который является целью нашего преобразования, а элемент value— значение после преобразования. Функция преобразования должна быть членом класса, для которого она определяется.
Чтобы проиллюстрировать создание функции преобразования, воспользуемся классом three_d еще раз. Предположим, что нам нужно иметь средство преобразования объекта типа three_d в целочисленное значение, которое можно использовать в целочисленном выражении. Более того, такое преобразование должно происходить с использованием произведения значений трех координат. Для реализации этого мы будем использовать функцию преобразования, которая выглядит следующим образом,
operator int() { return х * у * z; }
Теперь рассмотрим программу, которая иллюстрирует работу функции преобразования.
#include <iostream>
using namespace std;
class three_d {
int x, y, z; // 3-мерные координаты
public:
three_d(int a, int b, int с) { x = a; у = b; z = c; }
three_d operator+(three_d op2);
friend ostream &operator<<(ostream &stream, three_d &obj);
operator int() {return x * у * z; }
};
/* Отображение координат X, Y, Z - функция вывода данных для класса three_d.
*/
ostream &operator<<(ostream &stream, three_d &obj)
{
stream << obj.x << ", ";
stream << obj.у << ", ";
stream << obj.z << "\n";
return stream;
}
three_d three_d::operator+(three_d op2)
{
three_d temp(0, 0, 0);
temp.x = x+op2.x;
temp.у = y+op2.y;
temp.z = z+op2.z;
return temp;
}
int main()
{
three_d a(1, 2, 3), b(2, 3, 4);
cout << a << b;
cout << b+100; /* Отображает число 124, поскольку здесь выполняется преобразование объекта класса в значение типа int. */
cout << "\n";
а = а + b; // Сложение двух объектов класса three_d выполняется без преобразования типа.
cout << а; // Отображает координаты 3, 5, 7
return 0;
}
Эта программа генерирует такие результаты.
1, 2, 3
2, 3, 4
124
3, 5, 7
Как подтверждают результаты выполнения этой программы, если в таком выражении целочисленного типа, как cout<<b+100, используется объект типа three_d, к этому объекту применяется функция преобразования. В данном случае функция преобразования возвращает значение 24, которое затем участвует в операции сложения с числом 100. Но когда в преобразовании нет необходимости, как при вычислении выражения а=а+b, функция преобразования не вызывается.
Если функция преобразования создана, то она будет вызываться везде, где требуется преобразование, включая ситуации, когда объект передается функции в качестве аргумента. Например, если объект класса three_d передать стандартной функции abs(), также будет вызвана функция, выполняющая преобразование объекта типа three_d в значение типа int, поскольку функция abs() должна принимать аргумент целочисленного типа.
Узелок на память. Для различных ситуаций можно создавать различные функции преобразования. Например, можно определить функции, которые преобразуют объекты типа three_d в значения типа double или long, при этом созданные функции будут применяться автоматически. Функции преобразования позволяют интегрировать новые типы классов, создаваемые программистом, в С++-среду программирования.