#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;
}