2011-05-11 26 views
10
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; 
    } 
} 

Ejemplo:sobrecarga de operadores en C#

Point P1 = new Point(10,20); 
Point P2 = new Point(30,40) 
P1+P2; // operator overloading 
  1. ¿Hay que declarar siempre la función de la sobrecarga de operadores como estática? Cuál es la razón detrás de esto?
  2. Si quiero sobrecargar + para aceptar la expresión como 2 + P2, ¿cómo puedo hacer esto?
+2

La razón # 1 es la forma en que se encuentra, por lo que puede lograr fácilmente # 2. –

Respuesta

10
  1. Sí. Porque no se trata de instancias siempre con los operadores.
  2. Simplemente cambie los tipos a lo que desee.

Aquí se muestra un ejemplo para # 2

public static Point operator+(int value, Point point2) 
{ 
// logic here. 
} 

Usted tendrá que hacer a la inversa con los parámetros si desea P2 + 2 a trabajar.

Consulte http://msdn.microsoft.com/en-us/library/8edha89s.aspx para obtener más información.

4

para responder a sus preguntas:

  1. Sí, es necesario definirlos como estática. No son métodos de instancia, también pueden operar en null s.
  2. Vas a tener que definir una sobrecarga del operador, donde uno de los parámetros son de tipo int
+0

Si está agregando int + point en lugar de point + int, ¿seguirá haciendo la operación correctamente? – smelch

+0

en C++, si la sobrecarga del operador está definida por la función de miembro, entonces necesitamos pasar un parámetro o si está definido por la función amigo, necesitamos definir dos parámetros. ¿Es posible declarar el método de sobrecarga del operador como función memeber? – Raghav55

+0

No, no es posible declararlo como un miembro de instancia, debe declararlo como estático. Además, para manejar 'int + point' así como' point + int' debe declarar dos sobrecargas de operador. La razón es que 'int + point' podría producir un resultado diferente que' point + int'. Por ejemplo, el primero podría agregar la distancia desde el origen al int, como un número, mientras que el segundo podría compensar el punto por un valor dado. (es decir, uno produce un nuevo int, el otro un nuevo punto). –

0

Tanto de las respuestas anteriores a hablar de sus preguntas, así que no voy a entrometerse en los que, pero aquí es un ejemplo del uso de 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; 
    } 
Cuestiones relacionadas