Бьерн Страуструп. Язык программирования С++ Второе дополненное издание


 Пользовательские операции преобразования типа



Pdf көрінісі
бет138/256
Дата11.07.2022
өлшемі2,87 Mb.
#37591
1   ...   134   135   136   137   138   139   140   141   ...   256
7.3 Пользовательские операции преобразования типа 
Описанная во введении реализация комплексного числа является слишком ограниченной, чтобы 
удовлетворить кого-нибудь, и ее надо расширить. Делается простым повторением описаний того же 
вида, что уже были применены: 
class complex { 
double re, im; 
public: 
complex(double r, double i) { re=r; im=i; } 
friend complex operator+(complex, complex); 
friend complex operator+(complex, double); 
friend complex operator+(double, complex); 
friend complex operator-(complex, double); 
friend complex operator-(complex, double); 
friend complex operator-(double, complex); 
complex operator-(); // 
унарный - 
friend complex operator*(complex, complex); 
friend complex operator*(complex, double); 
friend complex operator*(double, complex); 
// 
... 
}; 
Имея такое определение комплексного числа, можно писать: 
void f() 

complex a(1,1), b(2,2), c(3,3), d(4,4), e(5,5); 
a = -b-c; 
b = c*2.0*c; 
c = (d+e)*a; 

Все-таки утомительно, как мы это только что делали для operator*() писать для каждой комбинации 
complex и double свою функцию. Более того, разумные средства для комплексной арифметики должны 
предоставлять десятки таких функций (посмотрите, например, как описан тип complex в ). 
7.3.1 Конструкторы 
Вместо того, чтобы описывать несколько функций, можно описать конструктор, который из параметра 
double создает complex: 
class complex { 
// 
... 
complex(double r) { re=r; im=0; } 
}; 
Этим определяется как получить complex, если задан double. Это традиционный способ расширения 
вещественной прямой до комплексной плоскости. 
Конструктор с единственным параметром не обязательно вызывать явно: 
complex z1 = complex(23); 
complex z2 = 23; 
Обе переменные z1 и z2 будут инициализироваться вызовом complex(23). 
Конструктор является алгоритмом создания значения заданного типа. Если требуется значение 
некоторого типа и существует строящий его конструктор, параметром которого является это значение, 
то тогда этот конструктор и будет использоваться. Так, класс complex можно было описать следующим 
образом: 
class complex { 
double re, im; 


Бьерн Страуструп.
Язык программирования С++ 
 
185 
public: 
complex(double r, double i =0) { re=r; im=i; } 
friend complex operator+(complex, complex); 
friend complex operator*(complex, complex); 
complex 
operator+=(complex); 
complex 
operator*=(complex); 
// 
... 
}; 
Все операции над комплексными переменными и целыми константами с учетом этого описания 
становятся законными. Целая константа будет интерпретироваться как комплексное число с мнимой 

Достарыңызбен бөлісу:
1   ...   134   135   136   137   138   139   140   141   ...   256




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет