AnteriorPosterior

7.6. Sobrecarga de operadores

  Curso: Programación en C# (2015), por Nacho Cabanes

7.6. Sobrecarga de operadores

Los "operadores" son los símbolos que se emplean para indicar ciertas operaciones. Por ejemplo, el operador "+" se usa para indicar que queremos sumar dos números.

Pues bien, en C# se puede "sobrecargar" operadores, es decir, redefinir su significado, para poder sumar (por ejemplo) objetos que nosotros hayamos creado, de forma más cómoda y legible. Así, para sumar dos matrices, en vez de hacer algo como "matriz3 = suma( matriz1, matriz2 )" podríamos hacer simplemente " matriz3 = matriz1 + matriz2"

No entraremos mucho más en detalle, pero la idea es que redefiniríamos un método llamado "operador +", y que devolvería un dato estático del tipo con el que estamos (por ejemplo, una Matriz) y recibiría dos datos de ese mismo tipo como parámetros:

public static Matriz operator +(Matriz mat1, Matriz mat2)
{
  Matriz nuevaMatriz = new Matriz();
 
  for (int x=0; x < tamanyo; x++)
    for (int y=0; y < tamanyo; y++)
      nuevaMatriz[x, y] = mat1[x, y] + mat2[x, y];
 
  return nuevaMatriz;
}
 

Desde "Main", calcularíamos una matriz como suma de otras dos haciendo simplemente

Matriz matriz3 = matriz1 + matriz2;
 

Eso sí, debes tener presente que "no todo se puede redefinir". Por ejemplo, puedes pensar en sobrecargar los operadores [ y ] para acceder a un cierto elemento de la matriz, pero C# no permite redefinir cualquier operador, y los corchetes están entre los que no podremos cambiar. En su lugar, deberías crear métodos Get para acceder a una posición y métodos Set para cambiar el valor de una posición.

Ejercicios propuestos:

Ejercicio propuesto 7.6.1: Desarrolla una clase "Matriz", que represente a una matriz de 3x3, con métodos para indicar el valor que hay en una posición, leer el valor de una posición, escribir la matriz en pantalla y sumar dos matrices. (Nota: en C# puedes sobrecargar el operador "+", pero no el operador "[]", de modo que tendrás que crear métodos "get" y "set" para leer los valores de posiciones de la matriz y para cambiar su valor).
Ejercicio propuesto 7.6.2: Si has estudiado los "números complejos", crea una clase "Complejo", que represente a un número complejo (formado por una parte "real" y una parte "imaginaria"). Incluye un constructor que reciba ambos datos como parámetros. Crea también métodos "get" y "set" para leer y modificar los valores de dichos datos, así como métodos que permitan saber los valores de su módulo y su argumento. Crea un método que permita sumar un complejo a otro, y redefine el operador "+" como forma alternativa de realizar esa operación.
Ejercicio propuesto 7.6.3: Crea una clase "Fraccion", que represente a una fracción, formada por un numerador y un denominador. Crea un constructor que reciba ambos datos como parámetros y otro constructor que reciba sólo el numerador. Crea un método Escribir, que escriba la fracción en la forma "3 / 2". Redefine los operadores "+", "-", "*" y "/" para que permitan realizar las operaciones habituales con fracciones.

Actualizado el: 29-01-2015 23:28

AnteriorPosterior