La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

1 La sobrecarga de funciones y operadores le da al programador la oportunidad de asignar nuevos significados a las funciones y a los operadores.

Presentaciones similares


Presentación del tema: "1 La sobrecarga de funciones y operadores le da al programador la oportunidad de asignar nuevos significados a las funciones y a los operadores."— Transcripción de la presentación:

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.


Descargar ppt "1 La sobrecarga de funciones y operadores le da al programador la oportunidad de asignar nuevos significados a las funciones y a los operadores."

Presentaciones similares


Anuncios Google