Дан класс:
#include <iostream> class Integer { public: Integer(double n) { value = n; } void print() const { std::cout << "value: " << value << std::endl; } private: double value; };
Определите для класса Integer оператор, который позволяет умножать объект Integer на число. Причем определите версии для умножения как на целое, так и на дробное число.
#include <iostream> class Integer { public: Integer(double n) { value = n; } void print() const { std::cout << "value: " << value << std::endl; } // объявление оператора Integer operator*(double n) const; private: double value; }; // реализация оператора Integer Integer::operator*(double n) const { return Integer{ value * n }; } int main() { Integer i1{22}; Integer i2 {i1 * 5}; Integer i3 {i1 * 5.5}; i2.print(); // value: 110 i3.print(); // value: 121 }
Создайте класс Rational, который представляет дробь. Определите в нем переменные, которые представляют числитель и знаменатель. Также определите для этого класса операторы сложения и умножения, а также оператор вывода на консоль.
#include <iostream> class Rational { public: Rational(int num, int denom) { numerator = num; // если знаменатель равен 0 if(denom==0) denom = 1; denominator = denom; } Rational operator+(const Rational& other) const { int denom {denominator}; int num { numerator + other.numerator}; // если знаменатели разные if(denominator != other.denominator) { num = numerator * other.denominator + other.numerator * denominator; denom = denominator * other.denominator; } return Rational{num, denom}; }; Rational operator*(const Rational& other) const { int denom {denominator * other.denominator}; int num { numerator * other.numerator}; return Rational{num, denom}; }; int getNumerator() const { return numerator; } int getDenominator() const { return denominator; } private: int numerator, denominator; }; // оператор вывода на консоль inline std::ostream& operator<<(std::ostream& stream, const Rational& r) { return stream << r.getNumerator() << "/" << r.getDenominator(); } int main() { Rational r1{3, 4}; // 3/4 Rational r2{1, 2}; // 1/2 Rational r3{r1 + r2}; std::cout << r3 << std::endl; // 10/8 Rational r4{r1 * r2}; std::cout << r4 << std::endl; // 3/8 Rational r5{1, 4}; // 1/4 Rational r6{r1 + r5}; // 3/4 + 1/4 std::cout << r6 << std::endl; // 4/4 Rational r7{4,0}; // 4/1 std::cout << r7 << std::endl; // 4/1 }