При работе со стандартными типами данных имеют место явное и неявное преобразования типов. По аналогии для классов могут быть определены такие же операции. Они ассоциируются с конструированием объектов.
“yyy” -> “xxx”
Если в программе встречается преобразование типа класса, то для осуществления этого преобразования необходим конструктор вида xxx (yyy &). Сами преобразования в этих случаях те же, что и обычные преобразования:
1) при использовании операции присваивания, если она не определяется напрямую;
2) при использовании явного преобразования;
3) при неявном преобразовании типа формального параметра функции в случае передачи его по значению;
4) при неявном преобразовании типа результата функции;
5) при определении объекта класса xxx и инициализации его объекта класса yyy.
yyy b; xxx a = b;
При конструировании объекта класса yyy должна быть обеспечена доступность данных, например, посредством дружественности.
Рассмотрим преобразование объекта класса dat с базовым типом int и long. Сущность этого преобразования заключается в выполнении полного количества дней в дате, заданной входным объектом long и количество дней в текущем году в этой же дате (заданной int). Для задания этих операций необходимо определить в классе dat переопределяемые операции int и long, которые будут задаваться соответствующими функциями – элементами без параметров.
static int days[] = {0,31,28,31, … }