• Предмет: Информатика
  • Автор: darki99
  • Вопрос задан 4 месяца назад

C++ Напишите класс Number. Этот класс будет олицетворять целое число типа int.

У него должен быть конструктор от одного числа типа int.

Метод Value(), который возвращает копию числа, которое хранится в Number. С помощью Value() нельзя давать возможность менять объект. А именно, строчка имя.Value() = ...; не должна даже компилироваться(см. пример)

operator+ и operator += для Number.

operator- и operator -= для Number.

Корректно и эффективно реализуйте вышеперечисленные методы как для константных, так и не константных объектов.

В систему отправляйте только код структуры

Пример работы


Number a(10);
Number b(15);
Number c = a + b;

std::cout << c.Value(); // 25
c += Number(100);
std::cout << c.Value(); // 125

/*c.Value() = 0; */ // CE

std::cout << c.Value(); // 125

Ответы

Ответ дал: pupkinll2016
0

Ответ:

#include <iostream>

class Number {

private:

int value;

public:

Number(int n) : value(n) {}

// метод для получения значения числа (не константный)

int Value() {

return value;

}

// метод для получения значения числа (константный)

int Value() const {

return value;

}

// оператор сложения для Number

Number operator+(const Number& other) const {

return Number(value + other.value);

}

// оператор сложения с присваиванием для Number

Number& operator+=(const Number& other) {

value += other.value;

return *this;

}

// оператор вычитания для Number

Number operator-(const Number& other) const {

return Number(value - other.value);

}

// оператор вычитания с присваиванием для Number

Number& operator-=(const Number& other) {

value -= other.value;

return *this;

}

};

int main() {

Number a(10);

Number b(15);

Number c = a + b;

std::cout << c.Value() << std::endl; // 25

c += Number(100);

std::cout << c.Value() << std::endl; // 125

// следующая строка вызовет ошибку компиляции

//c.Value() = 0;

std::cout << c.Value() << std::endl; // 125

return 0;

}

Объяснение:

Класс Number содержит одно приватное поле value, которое хранит значение числа типа int. Конструктор принимает один аргумент - число типа int, которое используется для инициализации поля value.

Метод Value() реализован в двух вариантах: не константный (для не константных объектов) и константный (для константных объектов). Не константный метод возвращает копию значения value, тогда как константный метод возвращает константную копию значения value. Это позволяет нам предотвратить изменение объектов через метод Value().

Операторы operator+, operator+=, operator- и operator-= перегружены для класса Number. Они позволяют складывать и вычитать объекты типа Number, а также выполнять соответствующие операции с присваиванием.

В функции main() мы создаем объекты a и b типа Number, затем складываем их и присваиваем результат объекту c. Затем мы выводим значение c.Value(), которое должно быть равно 25. Далее мы добавляем к объекту c число 100, используя оператор +=, и выводим его значение снова. Значение c.Value() должно быть равно 125.

Закомментированная строка c.Value() = 0; вызовет ошибку компиляции, так как метод `Value

Вас заинтересует