Помните, что операторы указания на члены класса предназначены для специальных случаев, и их не стоит использовать для решения обычных повседневных задач программирования.
Иногда возникает необходимость в одном выражении объединить созданный программистом класс с данными других типов. Несмотря на то что перегруженные операторные функции могут обеспечить использование смешанных типов данных, в некоторых случаях все же можно обойтись простым преобразованием типов. И тогда, чтобы преобразовать класс в тип, совместимый с типом остальной части выражения, можно использовать функцию преобразования типа. Общий формат функции преобразования типа имеет следующий вид.
operator type() {return value;}
Здесь элемент
Чтобы проиллюстрировать создание функции преобразования, воспользуемся классом
operator int() { return х * у * z; }
Теперь рассмотрим программу, которая иллюстрирует работу функции преобразования.
#include
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
Как подтверждают результаты выполнения этой программы, если в таком выражении целочисленного типа, как
Если функция преобразования создана, то она будет вызываться везде, где требуется преобразование, включая ситуации, когда объект передается функции в качестве аргумента. Например, если объект класса