Требуется обеспечить представление полярных координат и манипулирование ими.
Решение
Шаблон
complex
из заголовочного файла
<complex>
содержит функции преобразования в полярные координаты и обратно. Пример 11.34 показывает, как можно использовать класс шаблона complex для представления и манипулирования полярными координатами.
Пример 11.34. Применение шаблонного класса complex для представления полярных координат
Программа примера 11.34 выдает следующий результат.
rho = 3, theta = 1.5708
rho = 5, theta = 0.643501
Обсуждение
Существует естественная связь между полярными координатами и комплексными числами. Хотя эти понятия в какой-то мере взаимозаменяемы, использование одного и того же типа для представления разных концепций в целом нельзя считать хорошей идеей. Поскольку применение шаблона
complex
для представления полярных координат не является элегантным решением, я предусмотрел приведенный в примере 11.25 класс полярных координат, допускающий более естественное применение.
Пример 11.35. Класс полярных координат
#include <complex>
#include <iostream>
using namespace std;
template<class T>
struct BasicPolar {
public typedef BasicPolar self;
// конструкторы
BasicPolar : m {} BasicPolar(const self& x) : m(x.m) {}
. Так удобно определять используемый по умолчанию тип, однако вы можете при необходимости специализировать шаблон
BasicPolar
другим числовым типом. Такой подход используется в стандартной библиотеке в отношении классе
string
, который является специализацией шаблона
basic_string
.
11.19. Выполнение операций с битовыми наборами
Проблема
Требуется реализовать основные арифметические операции и операции сравнения для набора бит, рассматривая его как двоичное представление целого числа без знака.
Решение
Программный код примера 11.36 содержит функции, которые позволяют выполнять арифметические операции и операции сравнения с шаблоном класса