Загрузка данных


#include <iostream>

// =========================================================================
// ВАРИАНТ 1: Операторы реализованы как функции-члены класса
// =========================================================================
class MemberReal {
private:
    double value;

public:
    // Конструктор
    MemberReal(double val = 0.0) : value(val) {}

    double getValue() const { return value; }

    // --- Унарный оператор ++ (функция-член) ---
    // Префиксный инкремент (++obj)
    MemberReal& operator++() {
        ++value;
        return *this;
    }

    // Постфиксный инкремент (obj++)
    MemberReal operator++(int) {
        MemberReal temp = *this;
        value++;
        return temp;
    }

    // --- Бинарный оператор + (функция-член) ---
    // Складывает текущий объект с другим объектом
    MemberReal operator+(const MemberReal& other) const {
        return MemberReal(this->value + other.value);
    }
};


// =========================================================================
// ВАРИАНТ 2: Операторы реализованы как дружественные функции
// =========================================================================
class FriendReal {
private:
    double value;

public:
    // Конструктор
    FriendReal(double val = 0.0) : value(val) {}

    double getValue() const { return value; }

    // Объявление дружественных функций
    friend FriendReal& operator++(FriendReal& r);                          // Префиксный инкремент
    friend FriendReal operator+(const FriendReal& a, const FriendReal& b); // Бинарное сложение
};

// Реализация дружественного префиксного инкремента
FriendReal& operator++(FriendReal& r) {
    ++r.value;
    return r;
}

// Реализация дружественного бинарного сложения
FriendReal operator+(const FriendReal& a, const FriendReal& b) {
    return FriendReal(a.value + b.value);
}


// =========================================================================
// Демонстрация работы программы
// =========================================================================
int main() {
    std::setlocale(LC_ALL, "Russian");

    std::cout << "=== 1. ДЕМОНСТРАЦИЯ ФУНКЦИЙ-ЧЛЕНОВ КЛАССА ==-\n";
    MemberReal a(5.5);
    std::cout << "Начальное значение a: " << a.getValue() << "\n";

    ++a; // Префиксный инкремент
    std::cout << "После префиксного ++a: " << a.getValue() << "\n";

    a++; // Постфиксный инкремент
    std::cout << "После постфиксного a++: " << a.getValue() << "\n";

    MemberReal b(2.0);
    MemberReal c = a + b; // Бинарный оператор +
    std::cout << "Результат сложения a (" << a.getValue() << ") + b (" << b.getValue() << ") = " << c.getValue() << "\n\n";


    std::cout << "=== 2. ДЕМОНСТРАЦИЯ ДРУЖЕСТВЕННЫХ ФУНКЦИЙ ==-\n";
    FriendReal x(10.1);
    std::cout << "Начальное значение x: " << x.getValue() << "\n";

    ++x; // Префиксный инкремент (через дружественную функцию)
    std::cout << "После префиксного ++x: " << x.getValue() << "\n";

    FriendReal y(4.4);
    FriendReal z = x + y; // Бинарный оператор + (через дружественную функцию)
    std::cout << "Результат сложения x (" << x.getValue() << ") + y (" << y.getValue() << ") = " << z.getValue() << "\n";

    return 0;
}