Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porMartín Aguilar Escobar Modificado hace 8 años
1
1 La sobrecarga de funciones y operadores le da al programador la oportunidad de asignar nuevos significados a las funciones y a los operadores.
2
2 La mayoría de los operadores de C++ se les puede dar significados especiales con relación a clases especificas, se pueden tambien sobrecargar. Por ejemplo: en la clase JuegoDidactico donde se define una lista de figuras, se podría usar el operador + para añadir un nuevo objeto a la lista; mientras que otra clase puede usar el operador + de otra forma completamente diferente. Cuando se sobrecarga un operador no se pierde ninguno de sus significados previos, simplemente significa que se ha definido una nueva operación con relación a una clase especifica. Para sobrecargar un operador se debe definir que operación significa con relación a la clase a la que se aplica. La sobrecarga ayuda a crear código mas fácil de leer y depurar, pero si no se utiliza apropiadamente puede producir graves problemas.
3
3 El operador + por si mismo esta sobrecargado, porque opera sobre enteros, reales, y otros. No todos los operadores se pueden sobrecargar por ejemplo: el operador de resolución de ámbito (::), el ternario (?:). Los significados originales de los operadores no se pierden. Si se sobrecarga el +, de todas formas seguirá sumando enteros, reales, y otros. El compilador se encarga de seleccionar el código que se acomode a los operandos que se le pasan. Por ejemplo, se puede crear una clase que represente un número Complejo y sobrecargar el operador + para poder realizar la siguiente operación: Complejo ComPrimero(5,-2), ComSegundo(4, -1), ComSuma; ComSuma = ComPrimero + ComSegundo; En las expresiones, la prioridad de los operadores se conserva. Por ejemplo el * y el / tienen mayor prioridad que el + y el -.
4
4 Aunque se le puede dar cualquier significado a un operador sobrecargado, por claridad es mejor que su nuevo significado este relacionado con el anterior. Restricciones: - No se pueden construir nuevos operadores. - La sobrecarga funciona con objetos de la clase que se sobrecargo. - No se puede cambiar la prioridad. - Los operadores no pueden cambiar el número de operandos. - No se puede sobrecargar un operando que funcione sólo con punteros. El formato general de una operación operador es: Donde # es el operador que se desea sobrecargar. Argumentos: Los argumentos del operador. La cantidad depende de si es unitario(1) o binario(2). El primero debe ser una clase. Tipo_Retorno NombreClase:: operator # (Lista_Argumentos) { //operación definida con relación a la clase }
5
5 Cuando se sobrecarga un operador binario usando una función miembro solo se le pasa un argumento explícitamente. El otro argumento se pasa en forma implícita utilizando el puntero this. En todos los casos es el objeto de la parte izquierda de la operación el que produce la llamada a la función operador, el objeto del lado derecho se pasa a la función. Solo se necesita un parámetro para sobrecargar un operador binario. No se puede alterar el numero de operandos requeridos por el operador. Excepto para el operador =, los operadores sobrecargados se heredan en cualquier clase derivada. Los operadores que no se pueden sobrecargar son:..* :: ?
6
6 class Tiempo { int Horas, Minutos, Segundos; public: Tiempo(int H, int M, int S); int ConsultarHoras(); int ConsultarMin(); int ConsultarSeg(); void AsignarSegundos(int S); Tiempo operator + (Tiempo Otro); void operator = (Tiempo Otro); }; Tiempo Tiempo::operator + (Tiempo Otro) { Tiempo T; T.AsignarSegundos(Segundos + Otro.ConsultarSeg()); return T; } Void Tiempo::operator = (Tiempo Otro) { Horas = Otro.ConsultarHoras(); Minutos = Otro.ConsultarMin(); Segundos = Otro.ConsultarSeg(); }
7
7 Cuando se sobrecarga un operador unitario usando una función miembro no se pasan argumentos. void Tiempo::operator ++ () { Segundos++; if (Segundos > 59) {Segundos=0; Minutos++;} if (Minutos > 59) {Minutos=0; Horas++;} } -------------------------------------- Tiempo Tiempo1(1,2,3), Tiempo2(5,8,6), Tiempo3(8,7,1); Tiempo1 = Tiempo1 + Tiempo2; //Se debe sobrecargar el igual Tiempo1 = Tiempo1.operator+(Tiempo2); //Igual al anterior Tiempo1 = Tiempo1 + Tiempo2 + Tiempo3; Tiempo3++; Nota: se puede trabajar ocn polimorfismo, utilizando la misma interfaz para trabajar con diferentes clases de una misma jerarquía.
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.