Преобразование объекта в другой тип данных

Помимо операторов, язык C++ позволяет перегружать операцию приведения типов. Для этого используется следующий формат «операторного» метода:

operator <Тип данных>() {
   return <Значение, точно соответствующее типу>;
}

Название типа данных, в который производится приведение типа, задается после ключевого слова operator. Внутри метода необходимо вернуть значение, точно соответствующее этому типу. Метод не имеет типа возвращаемого значения и параметров.

Если внутри класса определен один «операторный» метод перегрузки приведения типа, то при указании объекта внутри выражения производится автоматическое преобразование объекта в другой тип, используя этот метод. Например, если существует перегрузка операции приведения к типу int, то объект можно преобразовать и в тип double. Однако, если существуют несколько методов, то компилятор уже не может выбрать метод. Поэтому перед объектом следует указать в какой тип данных необходимо его преобразовать с помощью операторов приведения типов. В качестве примера определим внутри класса три метода, позволяющих преобразовать объект в типы int, double и char * (листинг 14.11).

Листинг 14.11. Перегрузка операции приведения типов

#include <iostream>
#include <stdio.h>

class C {
   int x_;
public:
   char buf[255] = {0};
   C(int x) { x_ = x; }
   operator int() { return x_; }
   operator double() { return static_cast<double>(x_); }
   operator char*() {
      sprintf_s(buf, 255, "%d", x_);
      return buf;
   }
};

int main() {
   C obj(10);
   int x = static_cast<int>(obj) + 47;
   std::cout << x << std::endl;                   // 57
   x = (int)obj + 12;
   std::cout << x << std::endl;                   // 22
   double y = static_cast<double>(obj) + 22.5;
   std::cout << y << std::endl;                   // 32.5
   std::cout << static_cast<char *>(obj)
             << std::endl;                        // 10
   return 0;
}

Учебник C++ (MinGW-W64)
Учебник C++ (MinGW-W64) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов