4.6. Операции с комплексными числамиКласс комплексных чисел стандартной библиотеки С++ представляет собой хороший пример использования объектной модели. Благодаря перегруженным арифметическим операциям объекты этого класса используются так, как будто они принадлежат одному из встроенных типов данных. Более того, в подобных операциях могут одновременно принимать участие и переменные встроенного арифметического типа, и комплексные числа. (Отметим, что здесь мы не рассматриваем общие вопросы математики комплексных чисел. См. [PERSON68] или любую книгу по математике.) Например, можно написать: #include <complex> complex< double > a; Комплексные и арифметические типы разрешается смешивать в одном выражении: complex< double > complex_obj = a + 3.14159; Аналогично комплексные числа инициализируются арифметическим типом, и им может быть присвоено такое значение: double dval = 3.14159; complex_obj = dval; Или int ival = 3; complex_obj = ival; Однако обратное неверно. Например, следующее выражение вызовет ошибку компиляции: double dval = complex_obj; double re = complex_obj.real(); double im = complex_obj.imag(); или эквивалентный синтаксис вызова функции: double re = real(complex_obj); double im = imag(complex_obj); Класс комплексных чисел поддерживает четыре составных оператора присваивания: +=, -=, *= и /=. Таким образом, complex_obj += second_complex_obj; Поддерживается и ввод/вывод комплексных чисел. Оператор вывода печатает вещественную и мнимую части через запятую, в круглых скобках. Например, результат выполнения операторов вывода complex< double > complex0( 3.14159, -2.171 ); comp1ex< double > complex1( complexO.real() ); cout << complexO << " " << complex1 << endl; выглядит так: ( 3.14159, -2.171 ) ( 3.14159, 0.0 ) Оператор ввода понимает любой из следующих форматов: // допустимые форматы для ввода комплексного числа // 3.14159 ==> comp1ex( 3.14159 ); // ( 3.14159 ) ==> comp1ex( 3.14159 ); // ( 3.14, -1.0 ) ==> comp1ex( 3.14, -1.0 ); // может быть считано как // cin >> a >> b >> с // где a, b, с - комплексные числа 3.14159 ( 3.14159 ) ( 3.14, -1.0 ) Кроме этих операций, класс комплексных чисел имеет следующие функции-члены: sqrt(), abs(), polar(), sin(), cos(), tan(), exp(), log(), log10() и pow(). Упражнение 4.9Реализация стандартной библиотеки С++, доступная нам в момент написания книги,
не поддерживает составных операций присваивания, если правый операнд не является
комплексным числом. Например, подобная запись недопустима: #include <complex> inline complex<double>& operator+=( complex<double> &cval, double dval ) { return cval += complex<double>( dval ); } (Это пример перегрузки оператора для определенного типа данных, детально рассмотренной
в главе 15.) #include <iostream> #include <complex> // определения операций... int main() { Упражнение 4.10Стандарт С++ не специфицирует реализацию операций инкремента и декремента для
комплексного числа. Однако их семантика вполне понятна: если уж мы можем написать: #include <iostream> #include <complex> // определения операций... int main() {Назад Вперед Содержание |
2011-10-16 19:58:21 DIMA В самом начале в слове complex вместо l-1 Оставить комментарий: |