Создать класс Point - C# (193653)
Формулировка задачи:
Создать класс Point, содержащий следующие члены класса:
1. Поля:
• int x, y;
2. Конструкторы, позволяющие создать экземпляр класса:
• с нулевыми координатами;
• с заданными координатами.
3. Методы, позволяющие:
• вывести координаты точки на экран;
• рассчитать расстояние от начала координат до точки;
• переместить точку на плоскости на вектор (a, b).
4. Свойства, позволяющие:
• получить и установить координаты точки (доступное для чтения и записи);
• умножить координаты точки на скаляр (доступное только для записи).
5. Индексатор, позволяющий по индексу 0 обращаться к полю x, по индексу 1 – к полю y; при других значениях индекса должно выдаваться сообщение об ошибке.
6. Перегруженные операции и константы, позволяющие:
• одновременно увеличить (уменьшить) значения полей х и у на 1 (операции ++ и --);
• узнать, совпадают, или нет значения полей x и y (константы true и false);
• одновременно добавить к полям х и у значение скаляра (бинарный +).
Продемонстрировать работу класса. Выдаёт ошибку: Перегруженный бинарный оператор "==" принимает два параметра, как её исправить? Всё остальное в норме.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication11
{
class Program
{
static void Main(string[] args)
{
Point gg = new Point(5, 6, 2);
gg.Print();
gg.Distance();
Console.WriteLine("Расстояние от начала координат до точки = {0}", gg.Distance());
gg.Move(2, -5);
Console.WriteLine("Перемещение точки на вектор (а,b){0}", gg.Scalar(7));
gg.Print();
Console.WriteLine("Умножить координаты точки на скаляр");
gg.Print();
Console.WriteLine("Точка изменила координаты на +1 = {0}", ++gg);
gg.Print();
Console.WriteLine("Точка изменила координаты на -1 = {0}", --gg);
gg.Print();
Console.WriteLine("Проверка на равенсто х и у данной точки = {0}", gg.x == gg.y); //Хочу вывести на экран true или false
Console.WriteLine("Добавление к полям х и у значение скаляра {0}", gg + 5);
gg.Print();
}
}
}using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication11
{
class Point
{
/// <summary>
/// Абсцисса точки "X"
/// </summary>
public double x;
/// <summary>
/// Свойство для чтения и записи абциссы точки
/// </summary>
public double X
{
get { return x; }
set { x = value; }
}
/// <summary>
/// Ордината точки "Y"
/// </summary>
public double y;
/// <summary>
/// Свойство для чтения и записи ординаты точки
/// </summary>
public double Y
{
get { return y; }
set { y = value; }
}
/// <summary>
/// Значание скаляра
/// </summary>
private double value1;
/// <summary>
/// Свойство для чтения и записи значения скаляра
/// </summary>
public double Value1
{
get { return value1;}
set { value1 = value;}
}
/// <summary>
/// Свойство, умножающее координаты точки на скаляр
/// </summary>
public double Scalar
{
get { return value1; }
set
{
x = x * value1;
y = y * value1;
}
}
/// <summary>
/// Конструктор, создающий точку с заданными координатами и значение скаляра
/// </summary>
/// <param name="g"></param>
/// <param name="h"></param>
public Point(double g, double h, double r)
{
g = x;
h = y;
r = value1;
}
/// <summary>
/// Конструктор, создающий точку с нулевыми координатами
/// </summary>
public Point()
{
this.x = 0;
this.y = 0;
}
/// <summary>
/// Метод выведения координаты точки на экран
/// </summary>
public void Print()
{
Console.WriteLine("Координата точки = ({0};{1})", x, y);
}
/// <summary>
/// Метод выведения на экран расстояния от начала координат до точки
/// </summary>
/// <returns></returns>
public double Distance()
{
return Math.Sqrt(x * x + y * y);
}
/// <summary>
/// Метод перемещения точки на вектор (а,b)
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
public void Move(double a, double b)
{
x += a;
y += b;
}
/// <summary>
/// Индексатор,позволяющий по индексу 0 обращаться к полю x, по индексу 1 - к полю y.
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
public double this[int index]
{
get
{
if (index == 0) return x;
if (index == 1) return y;
else
{
throw new Exception();
}
}
set
{
if (index == 0) x = value;
if (index == 1) y = value;
}
}
/// <summary>
/// Одновременно увеличивает значение полей x и y
/// </summary>
/// <param name="ob"></param>
/// <returns></returns>
public static Point operator ++(Point ob)
{
ob.x = ob.x + 1;
ob.y = ob.y + 1;
return ob;
}
/// <summary>
/// Одновременно уменьшает значение полей x и y
/// </summary>
/// <param name="ob"></param>
/// <returns></returns>
public static Point operator --(Point ob)
{
try
{
ob.x = ob.x - 1;
ob.y = ob.y - 1;
if (ob.y < 0 | ob.x < 0) throw new System.ArithmeticException();
}
catch (System.ArithmeticException)
{
Console.WriteLine("Уменьшение не возможно !");
ob.x = ob.x + 1;
ob.y = ob.y + 1;
}
return ob;
}
/// <summary>
/// Возращает значение true, если поле x = y, иначе false
/// </summary>
/// <param name="ob"></param>
/// <returns></returns>
public bool operator ==(Point x, Point y, Point sd) //здесь ошибка
{
if(sd.x == sd.y)
{
return true;
}
else if(sd.x != sd.y)
{
return false;
}
}
/// <summary>
/// Добавляет к значению поля x и y значение скаляра n
/// </summary>
/// <param name="ob"></param>
/// <param name="n"></param>
/// <returns></returns>
public static Point operator +(Point ob,double n)
{
ob.x = ob.x + n;
ob.y = ob.y + n;
return ob;
}
}
}Решение задачи: «Создать класс Point»
textual
Листинг программы
/// <summary>
/// Возращает значение true, если поле x = y, иначе false
/// </summary>
public static bool operator ==(Point x, Point y)
{
return (x.X == y.X) && (x.Y == y.Y);
}
/// <summary>
/// Возращает значение true, если поле x != y, иначе false
/// </summary>
public static bool operator !=(Point x, Point y)
{
return (x.X != y.X) || (x.Y != y.Y);
}