Язык С++ и программирование на нем. Рейзлин В.И. - 122 стр.

UptoLike

Составители: 

124
21.5. Преобразование типов
Преобразование типов можно разделить на 4 группы:
1) стандартный к стандартному;
2) стандартный к абстрактному;
3) абстрактный к стандартному;
4) абстрактный к абстрактному.
Первые преобразования уже были нами рассмотрены. Преобразо-
вания второй группы основаны на использовании конструкторов как
явном, так и неявном.
Снова рассмотрим касс complex:
class complex {
double re, im;
public: complex (double r = 0, double i = 0){ re = r; im = i ; }
. . .
};
Объявления вида
complex c1;
complex c2 (1.8);
complex c3 (1.2, 3.7);
обеспечивают создание комплексных чисел.
Но конструктор может вызываться и неявно, в том случае, когда в
выражении должен находиться операнд типа complex, а на самом деле
присутствует операнд типа double:
complex operator + (complex & op, complex & op2 );
complex operator – (complex & op, complex & op2 );
complex operator * (complex & op, complex & op2 );
complex operator / (complex & op, complex & op2 );
complex operator – (complex & op ); // Унарный минус.
complex res;
res = – (c1 + 2) * c2 / 3 + .5 * c3;
Интерпретация, например, выражения (c1 + 2) будет следующей:
operator –((operator + (c1, complex ( double (2)))).
При выполнении этого выражения неявные вызовы конструкторов
создадут временные константы типа complex: (2.0, 0.0), (3.0, 0.0),
(4.5, 0.0), которые будут уничтожены сразу же после того, как в них от-