Самостоятельная работа По Дисциплине: Программирования на тему: № Работа с численными классами. Класс complex


Download 432.11 Kb.
bet6/10
Sana23.12.2022
Hajmi432.11 Kb.
#1046730
TuriСамостоятельная работа
1   2   3   4   5   6   7   8   9   10
Bog'liq
Работа с численными классами. Класс complex - C.Бойзаков

2.5 Доступ к данным
В таблице 3 перечислены функции получения атрибутов комплексных чисел.
Таблица 3- Функции получения атрибутов.

Выражение

Описание

c.real()

Возвращает значение вещественной части (функция класса)

real(c)

Возвращает значение вещественной части (глобальная функция)

c.lmag()

Возвращает значение мнимой части (функция класса)

imag(c)

Возвращает значение мнимой части (глобальная функция)

abs(c)

Возвращает модуль с ( )

norm(c)

Возвращает квадрат модуля с(c.real()2+c.imag()2)

arg(c)

Возвращает фазовый угол в полярном представлении c(φ); эквивалент atan2(c.imag(),c.real())

Функции real() и imag() позволяют только прочитать значения вещественной и мнимой частей. Чтобы изменить любую из частей комплексного числа, необходимо присвоить ему новое значение. Например, следующая команда присваивает мнимой части с значение 3.7: std::complex с;


... с = std::complex(c.real().3.7);


2.6 Операции сравнения

Из всех операций сравнения для комплексных чисел определены только проверки на равенство и на неравенство. Операторы == и != определены как глобальные функции, поэтому один из операндов может быть скалярной величиной. В этом случае операнд интерпретируется как вещественная часть, а мнимой части комплексного числа присваивается значение по умолчанию для данного типа (обычно 0).


Другие операции сравнения (например, с оператором < и т. д.) для класса complex не определены. Хотя в принципе для комплексных чисел можно определить порядок сортировки, результат получается недостаточно интуитивным и не приносит особой практической пользы. Например, сравнивать комплексные числа на основании модулей бессмысленно, поскольку два разных комплексных числа (например, 1 и -1) могут иметь одинаковые модули. Конечно, можно изобрести специальный критерий сортировки, например, для двух комплексных чисел c1 и с2 считать, что c1Таблица 4- Операции сравнения для класса complex<>.

Выражение

Описание

c1 == c2

Проверка на равенство c1 и с2 (c1.real()==c2.real() && c1.imag()==c2.imag())

с== 1.7

Проверка на равенство c1 и 1.7 (c1.real()==1.7 &&c1.imag()==0.0)

1.7 == с

Проверка на равенство 1.7 и с (c1.real0==1.7 && c1.imag()==0.0)

с1 != с2

Проверка на неравенство c1 и с2 (c1.real()!=c2.real() || c1.imag()!=c2.imag())

с != 1.7

Проверка на неравенство c1 и 1.7 (c1.real()!=1.7 || c1.imag()!=0.0)

1.7 != с

Проверка на неравенство 1.7 и с (c1.real()!=1.7 || c1.imag()!=0.0)

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


Определение пользовательского оператора < позволяет сортировать комплексные числа и использовать их в ассоциативных контейнерах. Нельзя нарушать стандартное пространство имен. Пример:

Листинг 5-правильное пространство имен


template
bool operator< (const std::complex& c1.
const std::complex& c2)
{
return std::abs(cl)(std::abs(cl)==std::abs(c2) &&
std: :arg(cl)}

Download 432.11 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9   10




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling