C++   ::   Хилл Мюррей

Страница: 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 След. >|

Java книги

Контакты: [email protected]