Escolar Documentos
Profissional Documentos
Cultura Documentos
1. Sobrecarga de operadores 2. Mtodos operadores unarios Operador de incremento (prefijo) 3. Devolucin de objetos en los mtodos. Retorno por referencia
Hay ms ...
Operadores NO sobrecargables . ::
3
Operador punto
Hay ms ...
Prototipo
Fraccional Fraccional :: operator + (Fraccional f ) { Fraccional aux; aux.numerador = numerador * f.denominador + denominador * f.numerador; aux.denominador = denominador * f.denominador; aux. simplifica(); return aux; } 4
Prototipo
6
void operator ++ ( );
Mtodos operadores
Seguimos teniendo un problema, el mtodo modifica el objeto y devuelve una copia del objeto receptor.
Modifica adecuadamente el objeto receptor Se puede utilizar para incrementar un Fraccional y asignar el resultado a otro Fraccional
ERROR
8
Mtodos operadores
Comportamiento
f1
numerador
1
denominador
Mtodos operadores
Comportamiento
... Fraccional f1(1, 1) ; ++(++f1) ;
2
denominador
10
Mtodos operadores
Comportamiento
... Fraccional f1(1, 1) ; ++(++f1) ;
2
denominador
11
Mtodos operadores
Comportamiento
... Fraccional f1(1, 1) ; ++(++f1) ;
2
denominador
numerador
2
denominador
tmp1
12
Mtodos operadores
Comportamiento
... Fraccional f1(1, 1) ; ++(++f1) ;
2
denominador
numerador
3
denominador
1
13
Mtodos operadores
Comportamiento
... Fraccional f1(1, 1) ; ++(++f1) ;
2
denominador
numerador
numerador
3
denominador
3
denominador
1 tmp1
14
Devolucin por valor Se devuelve una copia del objeto receptor, es decir, se devuelve una copia de la copia. tmp2
Mtodos operadores
Comportamiento
... Fraccional f1(1, 1) ; ++(++f1) ;
2
denominador
numerador
numerador
3
denominador
3
denominador
1 tmp1
15
No se obtiene el resultado deseado, ya que el segundo incremento se realiza sobre la copia que devuelve el primero. tmp2
Mtodos operadores
Fraccional & Fraccional :: operator ++ ( ) { numerador = numerador + denominador ; simplifica() ; return *this ; }
Sin problemas
16
Modifica adecuadamente el objeto receptor y se devuelve el mismo como resultado de la ejecucin del mtodo, de forma que cualquier nueva operacin se realiza sobre el resultado de sta operacin, se efecta sobre ese mismo objeto.
17
void main() { Fraccional f1(1,2), f2(2,1); f1 += f2 ; ... ... f1. operator += ( f2 ) ; ...
18
Fraccional & Fraccional :: operator += (Fraccional f ) { numerador = numerador * f.denominador + denominador * f.numerador; denominador = denominador * f.denominador; simplifica(); return *this; }