При создании классов-обёрток иногда требуется приводить их к более простым типам. Для упрощения этой операции можно перегрузить оператор приведения типа.
Общий синтаксис оператора приведения типа выглядит так:
operator new_type () const;
где new_type — тип, к которому осуществляется приведение. Оператор должен возвращать значение этого типа.
Ниже приводится пример программы, демонстрирующей его использование.
#include <stdio.h> class Integer { public: operator int () const {return val_;}; Integer(int val = 0) : val_(val) {}; private: int val_; }; int main() { Integer a(5); printf("%d\r\n", static_cast<int>(a)); return 0; };
Если бы мы не перегрузили оператор приведения типа, то при попытке скомпилировать этот пример мы бы получили сообщение об ошибке:
invalid static_cast from type ‘Integer’ to type ‘int’
Благодаря перегруженному оператору приведения типа компилятор может автоматически конвертировать Integer в int. Поэтому нам нужно быть предельно внимательными. Например, у нас есть две функции:
void foo(Integer);
void foo(int);
Если они имеют разную реализацию, то нужно внимательно следить за тем, какая функция и когда вызывается. Если же они имеют сходную реализацию, то можно написать только одну из них. Причем не важно какую именно.
Для конвертирования типа int в Integer вызывается конструктор последнего. А для обратного конвертирования Integer в int — оператор приведения типа. Причем все эти вызовы компилятор делает автоматически.