Страница:
204 из 357
0*c; c = (d+e)*a; *)
Но писать функцию для каждого сочетания complex и double, как это делалось выше для operator+(), невыносимо нудно. Кроме того, близкие к реальности средства комплексной арифметики должны предоставлять по меньшей мере дюжину таких функций. Посмотрите, например, на тип complex, описанный в «complex.h».
6.3.1 Конструкторы
Альтернативу использованию нескольких функций (перегрженных) составляет описание конструктора, который по заданнму double создает complex. Например:
class complex (* // ... complex(double r) (* re=r; im=0; *) *);
Конструктор, требующий только один параметр, необязтельно вызывать явно:
complex z1 = complex(23); complex z2 = 23;
И z1, и z2 будут инициализированы вызовом complex(23).
Конструктор – это предписание, как создавать значение данного типа. Когда требуется значение типа, и когда такое значение может быть создано конструктором, тогда, если такое значение дается для присваивания, вызывается конструктор. Например, класс complex можно было бы описать так:
class complex (* double re, im; public: complex(double r, double i = 0) (* re=r; im=i; *)
friend complex operator+(complex, complex); friend complex operator*(complex, complex); *);
и действия, в которые будут входить переменные complex и целые константы, стали бы допустимы. Целая константа будет интерпретироваться как complex с нулевой мнимой частью. Наример, a=b*2 означает:
a=operator*( b, complex( double(2), double(0) ) )
Определенное пользователем преобразование типа применется неявно только тогда, когда оно является единственным.
|< Пред. 202 203 204 205 206 След. >|