Завершено
2
11.03.2020, 12:33
05.06.2020, 03:18
Реализовать класс LongInteger
для работы с очень длинными
(> LLONG_MAX) знаковыми целыми числами.
Реализовать класс LongInteger
.
public
методы класса фиксированы,
кроме спецификаторов.
Т.е. нельзя менять названия методов, а также типы и количество аргументов.
НО в этих методах отсутствуют спецификаторы const
и static
,
которые были удалены намеренно. Их необходимо вернуть на место.
private
поля и private
методы можно добавлять в класс LongInteger
.
//LongInteger.hpp
class LongInteger {
public:
LongInteger();
LongInteger(int i);
LongInteger(const char* iStr);
LongInteger(const LongInteger& val);
~LongInteger();
size_t ToString(char* buff, size_t buff_lenght);
LongInteger& operator= (int val);
LongInteger& operator+=(int val);
LongInteger& operator-=(int val);
LongInteger& operator*=(int val);
LongInteger& operator/=(int val);
LongInteger& operator= (const LongInteger &val);
LongInteger& operator+=(const LongInteger &val);
LongInteger& operator-=(const LongInteger &val);
LongInteger& operator*=(const LongInteger &val);
LongInteger& operator/=(const LongInteger &val);
bool operator==(const LongInteger &right);
bool operator!=(const LongInteger &right);
bool operator>=(const LongInteger &right);
bool operator<=(const LongInteger &right);
bool operator>(const LongInteger &right);
bool operator<(const LongInteger &right);
LongInteger operator+(const LongInteger &right);
LongInteger operator-(const LongInteger &right);
LongInteger operator*(const LongInteger &right);
LongInteger operator/(const LongInteger &right);
LongInteger operator%(const LongInteger &right);
protected:
private:
};
LongInteger()
-- Конструктор по умолчаниюLongInteger(int i)
-- Конструктор определяющий LongInteger
из знакового целого.LongInteger(const char* iStr)
-- Конструктор из строкового представления целого числи по основанию 10. Кидает исключение std::invalid_argument
, если строка невалидная. Пустая строка считается валидной.LongInteger(const LongInteger& val)
-- Копирующий конструктор.~LongInteger()
-- деструктор.size_t ToString(char* buff, size_t buff_lenght)
-- Преобразует LongInteger
в строковое представление целого числа по основанию 10.
char* buff
- Буфер для строки,
size_t buff_lenght
- длина буфера.
Возвращает количество записанных в буфер байт (включая заключительный ноль).
Если в буфере не достаточно места, в буфер ничего не записывается и возвращается количество байт, необходимое для правильного вывода (включая заключительный ноль).int
LongInteger& operator= (int val)
-- Оператор присваивания, аналог конструктора из целого числа. LongInteger& operator+=(int val)
-- Оператор +=
, прибавить...LongInteger& operator-=(int val)
-- Оператор -=
, отнять...LongInteger& operator*=(int val)
-- Оператор *=
, умножить на...LongInteger& operator/=(int val)
-- Оператор /=
, поделить на...LongInteger
LongInteger& operator= (const LongInteger& val)
-- Оператор присваивания, аналог конструктора копирующего конструктора. LongInteger& operator+=(const LongInteger& val)
-- Оператор +=
, прибавить...LongInteger& operator-=(const LongInteger& val)
-- Оператор -=
, отнять...LongInteger& operator*=(const LongInteger& val)
-- Оператор *=
, умножить на...LongInteger& operator/=(const LongInteger& val)
-- Оператор /=
, поделить на... bool operator==(const LongInteger& right)
-- Оператор ==
, возвращает true
если аргумент равен исходному числуbool operator!=(const LongInteger& right)
-- Оператор !=
, возвращает true
если аргумент не равен исходному числуbool operator>=(const LongInteger &right)
-- Оператор больше либо равноbool operator<=(const LongInteger &right)
-- Оператор меньше либо равноbool operator>(const LongInteger &right)
-- Оператор большеbool operator<(const LongInteger &right)
-- Оператор меньшеLongInteger operator+(const LongInteger& right)
-- Оператор сложения длинных целых чиселLongInteger operator-(const LongInteger& right)
-- Оператор вычитания длинных целых чиселLongInteger operator*(const LongInteger& right)
-- Оператор умножения длинных целых чиселLongInteger operator/(const LongInteger& right)
-- Оператор деления длинных целых чиселLongInteger operator%(const LongInteger &right)
-- Оператор остаток от деления длинных целых чиселПримечание: при делении на 0 кидать исключение std::invalid_argument
.
так и не избавились от лишних копирований при выполнении арифметический операций