Загрузка данных
using System;
namespace OperatorPractice
{
public class Vector
{
public double X { get; set; }
public double Y { get; set; }
public Vector(double x, double y)
{
X = x;
Y = y;
}
public override string ToString() => $"({X}, {Y})";
// Бинарный +
public static Vector operator +(Vector a, Vector b)
{
return new Vector(a.X + b.X, a.Y + b.Y);
}
// Бинарный -
public static Vector operator -(Vector a, Vector b)
{
return new Vector(a.X - b.X, a.Y - b.Y);
}
// Умножение Vector * double
public static Vector operator *(Vector a, double k)
{
return new Vector(a.X * k, a.Y * k);
}
// Умножение double * Vector
public static Vector operator *(double k, Vector a)
{
return new Vector(a.X * k, a.Y * k);
}
// == и !=
public static bool operator ==(Vector a, Vector b)
{
return a.X == b.X && a.Y == b.Y;
}
public static bool operator !=(Vector a, Vector b)
{
return !(a == b);
}
// Equals и GetHashCode
public override bool Equals(object obj)
{
if (obj is Vector other)
return this == other;
return false;
}
public override int GetHashCode()
{
return HashCode.Combine(X, Y);
}
// Унарный -
public static Vector operator -(Vector a)
{
return new Vector(-a.X, -a.Y);
}
// Явное преобразование в double (длина)
public static explicit operator double(Vector v)
{
return Math.Sqrt(v.X * v.X + v.Y * v.Y);
}
// Вспомогательный метод Length
public double Length()
{
return Math.Sqrt(X * X + Y * Y);
}
// Операторы < и >
public static bool operator <(Vector a, Vector b)
{
return a.Length() < b.Length();
}
public static bool operator >(Vector a, Vector b)
{
return a.Length() > b.Length();
}
}
class Program
{
static void Main(string[] args)
{
var v1 = new Vector(2, 3);
var v2 = new Vector(4, 1);
Console.WriteLine("v1 = " + v1);
Console.WriteLine("v2 = " + v2);
Console.WriteLine("v1 + v2 = " + (v1 + v2));
Console.WriteLine("v1 - v2 = " + (v1 - v2));
Console.WriteLine("v1 * 2 = " + (v1 * 2));
Console.WriteLine("3 * v2 = " + (3 * v2));
Console.WriteLine();
Console.WriteLine(v1 + v2); // Vector + Vector
Console.WriteLine(v1 * 2); // Vector * double
Console.WriteLine(2 * v1); // double * Vector
Console.WriteLine();
var v3 = new Vector(2, 3);
var v4 = new Vector(2, 3);
Console.WriteLine("v3 == v4: " + (v3 == v4)); // True
Console.WriteLine("v3 != v4: " + (v3 != v4)); // False
Console.WriteLine("v3.Equals(v4): " + v3.Equals(v4)); // True
Console.WriteLine();
Console.WriteLine("-v1 = " + (-v1)); // (-2, -3)
Console.WriteLine();
double length = (double)v1;
Console.WriteLine("Длина v1: " + length); // 3.605551275463989
Console.WriteLine();
Console.WriteLine("v1 < v2: " + (v1 < v2)); // False
Console.WriteLine("v1 > v2: " + (v1 > v2)); // True
Console.ReadLine();
}
}
}