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