Вообще не нужна. Это синтаксический сахар, без которого подавляющее большинство языков прекрасно обходится.
Перегрузка операций создаёт дополнительные проблемы - и только ради того, чтобы заменить явный вызов функции, назначение которой понятно из её названия, более коротким значком операции, делающей непонятно что.
Например, в векторной алгебре есть несколько видов умножения. Какое именно из них должно обозначаться символом '*'?
Другие языки программирования и технологии
Зачем нужна перегрузка операторов? Можете написать код для большей усваимости C#
Для определения операции по оператору над экземплярами классов и структур.
Если он перегружен - он может оперировать над экземплярами или над одним экземпляром, если он унарный.
using System;
namespace ConsoleApp9
{
class Point
{
public int x { set; get; }
public int y { set; get; }
public Point(int x, int y)
{
this.x = x;
this.y = y;
}
public Point()
{
}
public static Point operator +(Point p1, Point p2)
{
var p = new Point();
p.x = p1.x + p2.x;
p.y = p1.y + p2.y;
return p;
}
}
class Program
{
static void Main(string[] args)
{
Console.ForegroundColor = ConsoleColor.Green;
Console.BackgroundColor = (ConsoleColor)0;
Console.Clear();
var po1 = new Point(4, 5);
var po2 = new Point(8, -7);
var po3 = po1 + po2; //Если бы оператор "+" не был перегружен относительно класса Point, то сложить эти экземпляры не получилось бы
Console.WriteLine($"Координаты результирующей точки x {po3.x} y {po3.y}");
Console.ReadKey();
}
}
}
Если он перегружен - он может оперировать над экземплярами или над одним экземпляром, если он унарный.
using System;
namespace ConsoleApp9
{
class Point
{
public int x { set; get; }
public int y { set; get; }
public Point(int x, int y)
{
this.x = x;
this.y = y;
}
public Point()
{
}
public static Point operator +(Point p1, Point p2)
{
var p = new Point();
p.x = p1.x + p2.x;
p.y = p1.y + p2.y;
return p;
}
}
class Program
{
static void Main(string[] args)
{
Console.ForegroundColor = ConsoleColor.Green;
Console.BackgroundColor = (ConsoleColor)0;
Console.Clear();
var po1 = new Point(4, 5);
var po2 = new Point(8, -7);
var po3 = po1 + po2; //Если бы оператор "+" не был перегружен относительно класса Point, то сложить эти экземпляры не получилось бы
Console.WriteLine($"Координаты результирующей точки x {po3.x} y {po3.y}");
Console.ReadKey();
}
}
}
в основном для упрощения кода, вот пример из моей проги, 2 перегрузки оператора умножения для моего класса для работы с матрицами 6x6, первый для перемножение матриц между собой и второй для умножения матрицы на число типа double
static public Matrix operator *(Matrix M, Matrix N)
{
Matrix K = new Matrix();
for (int i = 1; i < 7; i++)
{
for (int j = 1; j < 7; j++)
{
for (int k = 1; k < 7; k++)
K.matrix[i, j] += M.matrix[i, k] * N.matrix[k, j];
}
}
return (K);
}
static public Matrix operator *(Matrix M, double n)
{
Matrix K = new Matrix();
for (int i = 1; i < 7; i++)
{
for (int j = 1; j < 7; j++)
{
K.matrix[i, j] = M.matrix[i, j]*n ;
}
}
return (K);
}
static public Matrix operator *(Matrix M, Matrix N)
{
Matrix K = new Matrix();
for (int i = 1; i < 7; i++)
{
for (int j = 1; j < 7; j++)
{
for (int k = 1; k < 7; k++)
K.matrix[i, j] += M.matrix[i, k] * N.matrix[k, j];
}
}
return (K);
}
static public Matrix operator *(Matrix M, double n)
{
Matrix K = new Matrix();
for (int i = 1; i < 7; i++)
{
for (int j = 1; j < 7; j++)
{
K.matrix[i, j] = M.matrix[i, j]*n ;
}
}
return (K);
}
Похожие вопросы
- Перегрузка оператора в C++
- Напишите код на C++
- Помогите написать код на C++
- Помогите написать код на C++
- Помогите написать код на C++
- Помогите исправить код так, чтобы работал! :) (C#)
- объясните что такое перегрузка операторов
- Впервые открыла Visual C++ и уже целый час не могу написать простейшую программку
- Как правилоно написать код по C++
- Как удалить нулевые элементы из массива C++. Помогите написать код для того чтобы из массива удалить все нулевые элементы