Блок задач

3. Простые классы

Сложность 2

Задача «Комплексные числа»

Реализовать класс Complex для работы с комплексными числами на основе double.

Постановка задачи

Реализовать класс Complex . public и protected методы классов фиксированы, кроме спецификаторов. Т.е. нельзя менять названия методов, а также типы и количество аргументов. НО в этих методах отсутствуют спецификаторы const и static, которые были удалены намеренно. Их необходимо вернуть на место.

private поля и private методы можно добавлять в класс Complex.

//Complex.hpp
class Complex {
public:
  Complex();
  Complex(double re, double im = 0);
  Complex(const Complex& val);

  void Re(double re);
  void Im(double im);
  double Re();
  double Im();
  double Abs();
  double Arg();
  static Complex Polar(double modulus, double argument = 0);

  Complex& operator=(double re);
  Complex& operator+=(double re);
  Complex& operator-=(double re);
  Complex& operator*=(double re);
  Complex& operator/=(double re);

  Complex& operator= (const Complex& val);
  Complex& operator+=(const Complex& val);
  Complex& operator-=(const Complex& val);
  Complex& operator*=(const Complex& val);
  Complex& operator/=(const Complex& val); 

  bool operator==(const Complex& right);
  bool operator!=(const Complex& right);

  Complex operator+(const Complex &right);
  Complex operator-(const Complex &right);
  Complex operator*(const Complex &right);
  Complex operator/(const Complex &right);
  Complex sqrt();
  Complex pow(int pow);

protected:
  double _re;
  double _im;
private:

};
  • Complex() -- Конструктор по умолчанию
  • Complex(double re, double im = 0) -- Конструктор определяющий Complex с помощью задания вещественной и мнимой частей.
  • Complex(const Complex& val) -- Копирующий конструктор.
  • void Re(double re) -- Задание вещественной части Complex
  • void Im(double im) -- Задание мнимой части Complex
  • double Re() -- Возвращает вещественную часть Complex
  • double Im() -- Возвращает мнимую часть Complex
  • double Abs() -- Возвращает модуль Комплексного числа
  • double Arg() -- Возвращает аргумент Комплексного числа
  • static Complex Polar(double modulus, double argument = 0) -- Конструирует комплексное число, которое соответствует указанному модулю и аргументу

Стандартные операторы, принимающие в качестве аргументов double

  • Complex& operator= (double re) -- Оператор присваивания, аналог конструктора из вещественного числа.
  • Complex& operator+=(double re) -- Оператор +=, прибавить...
  • Complex& operator-=(double re) -- Оператор -=, отнять...
  • Complex& operator*=(double re) -- Оператор *=, умножить на...
  • Complex& operator/=(double re) -- Оператор /=, поделить на...

Стандартные операторы, принимающие в качестве аргументов Complex

  • Complex& operator= (const Complex& val) -- Оператор присваивания, аналог конструктора копирующего конструктора.
  • Complex& operator+=(const Complex& val) -- Оператор +=, прибавить...
  • Complex& operator-=(const Complex& val) -- Оператор -=, отнять...
  • Complex& operator*=(const Complex& val) -- Оператор *=, умножить на...
  • Complex& operator/=(const Complex& val) -- Оператор /=, поделить на...
  • bool operator==(const Complex& right) -- Оператор ==, возвращает true если аргумент равен исходному числу
  • bool operator!=(const Complex& right) -- Оператор !=, возвращает true если аргумент не равен исходному числу
  • Complex operator+(const Complex& right) -- Оператор сложения комплексных чисел
  • Complex operator-(const Complex& right) -- Оператор вычитания комплексных чисел
  • Complex operator*(const Complex& right) -- Оператор умножения комплексных чисел
  • Complex operator/(const Complex& right) -- Оператор деления комплексных чисел

Некоторые функции

  • Complex sqrt(const Complex &val) -- функция возвращает квадратный корень из комплексного числа
  • Complex pow(const Complex &val, int pow) -- Возведении комплексного числа в целую степень

Требования

  1. public и protected методы классов фиксированы. Т.е. нельзя менять названия методов, а также типы и количество аргументов.
  2. Названия header и source файлов следующие: Complex.hpp, Complex.cpp.
  3. Написать unit test'ы для реализованных классов.