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


#include <iostream>
#include <cmath>
using namespace std;

class Point {
private:
    double x, y;

public:
    // Конструктор с параметрами по умолчанию
    Point(double x = 0, double y = 0) : x(x), y(y) {}

    // ✅ Константный метод distance() — расстояние до начала координат (0, 0)
    //    Формула: sqrt(x² + y²)
    //    const — гарантирует, что метод не изменяет объект
    double distance() const {
        return sqrt(x * x + y * y);
    }

    // ✅ Перегрузка оператора << как дружественной (friend) функции
    //    Выводит точку в формате (x, y)
    friend ostream& operator<<(ostream& os, const Point& p) {
        os << "(" << p.x << ", " << p.y << ")";
        return os;
    }
};

int main() {
    Point p1(3, 4);
    Point p2(0, 0);
    Point p3(1, 1);

    // Тестируем оператор <<
    cout << "p1 = " << p1 << endl;   // p1 = (3, 4)
    cout << "p2 = " << p2 << endl;   // p2 = (0, 0)
    cout << "p3 = " << p3 << endl;   // p3 = (1, 1)

    // Тестируем метод distance()
    cout << "Расстояние p1 до начала координат: " << p1.distance() << endl;  // 5
    cout << "Расстояние p2 до начала координат: " << p2.distance() << endl;  // 0
    cout << "Расстояние p3 до начала координат: " << p3.distance() << endl;  // 1.41421

    // Проверяем, что distance() работает с const-объектом
    const Point p4(6, 8);
    cout << "p4 = " << p4 << ", distance = " << p4.distance() << endl;  // 10

    return 0;
}