С++ для начинающих




Операции с комплексными числами - часть 2


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

Реализация стандартной библиотеки С++, доступная нам в момент написания книги, не поддерживает составных операций присваивания, если правый операнд не является комплексным числом. Например, подобная запись недопустима:

complex_obj += 1;

 (Хотя согласно стандарту С++ такое выражение должно быть корректно, производители часто не успевают за стандартом.) Мы можем определить свой собственный оператор для реализации такой операции. Вот вариант функции, реализующий оператор сложения для complex<double>:

#include <complex>

inline complex<double>&

operator+=( complex<double> &cval, double dval )

{

    return cval += complex<double>( dval );

}

 (Это пример перегрузки оператора для определенного типа данных, детально рассмотренной в главе 15.)

Используя этот пример, реализуйте три других составных оператора присваивания для типа complex<double>. Добавьте свою реализацию к программе, приведенной ниже, и запустите ее для проверки.

#include <iostream>

#include <complex>

// определения операций...

int main() {

    complex< double > cval ( 4.0, 1.0 );

    cout << cval << endl;

    cval += 1;




Содержание  Назад  Вперед