#c# #operator-overloading
#c# #перегрузка оператора
Вопрос:
class Point
{
private int m_PointX;
private int m_PointY;
public Point(int x, int y)
{
m_PointX = x;
m_PointY = y;
}
public static Point operator (Point point1, Point point2)
{
Point P = new Point();
P.X = point1.X point2.X;
P.Y = point1.Y point2.Y;
return P;
}
}
Пример:
Point P1 = new Point(10,20);
Point P2 = new Point(30,40)
P1 P2; // operator overloading
- Обязательно ли всегда объявлять функцию перегрузки оператора как статическую? В чем причина этого?
- Если я хочу перегрузить , чтобы принять выражение типа 2 P2, как это сделать?
Комментарии:
1. Причина № 1 в том, что так оно и есть, поэтому вы можете легко выполнить # 2.
Ответ №1:
- ДА. Потому что вы не всегда имеете дело с экземплярами с операторами.
- Просто измените типы на те, которые вы хотите.
Вот пример для #2
public static Point operator (int value, Point point2)
{
// logic here.
}
Вам придется поступить с параметрами по-другому, если вы хотите P2 2
работать.
Смотрите http://msdn.microsoft.com/en-us/library/8edha89s.aspx для получения дополнительной информации.
Ответ №2:
Чтобы ответить на ваши вопросы:
- Да, вам нужно определить их как статические. Они не являются методами экземпляра, они также могут работать с
null
s. - Вам нужно будет определить перегрузку оператора, где один из параметров имеет тип
int
Комментарии:
1. Если вы добавляете int point вместо point int, будет ли это по-прежнему выполнять операцию правильно?
2. в C , если перегрузка оператора определяется функцией-членом, то нам нужно передать один параметр, или, если определено функцией friend, нам нужно определить два параметра. Возможно ли объявить метод перегрузки оператора как функцию-член?
3. Нет, невозможно объявить его как элемент экземпляра, вам нужно объявить его как статический. Кроме того, для обработки
int point
так же хорошо, какpoint int
вам нужно объявить две перегрузки оператора. Причина в том, чтоint point
может привести к другому результату, чемpoint int
. Например, первый может добавлять расстояние от начала координат к целому в виде числа, тогда как второй может смещать точку на заданное значение. (т.Е. один создает новый int, другой — новую точку.)4. по какой причине операторы были перегружены как статические?
5. Я не знаю, вам пришлось бы пинговать Эрика Липперта или кого-нибудь из ребят-компиляторов. В любом случае, они являются статическими, и обойти это невозможно.
Ответ №3:
Оба предыдущих ответа касаются ваших вопросов, поэтому я не собираюсь вторгаться в них, но вот пример использования 2 P:
public static Point operator (int yourInt, Point point)
{
Point P = new Point();
P.X = point.X yourInt;
P.Y = point.Y yourInt;
return P;
}