Professional Documents
Culture Documents
Sobrecarga de Operadores II
1
nitarios
class Tiempo
,egla: si se declara un par-metro para un operador ++ .. se sobrecargarla forma sufija del operador. El par-metro se ignorar-+ as/ que bastar- con indicar el tipo. (uando se usa un operador en la forma sufijo dentro de una e0presin+ primero se usa el &alor actual del objeto+ 1 una &e2 e&aluada la e0presin+ se aplica el operador. 3rimero de&ol&emos el &alor actual 1 luego incrementamos !*er i++". Si nosotros queremos que nuestro operador act4e igual deberemos usar un objeto temporal+ 1 asignarle el &alor actual del objeto. Seguidamente aplicamos el operador al objeto actual 1 finalmente retornamos el objeto temporal.
nitarios
Tiempo Tiempo::operator++(int) { //Constructor copia Tiempo temp(*this); minuto++; while(minuto >= 60) { minuto -= 60; hora++;
En general podremos %acer con&ersiones de tipo desde cualquier objeto a un objeto de nuestra clase sobrecargando el constructor. !3or ejemplo si consideramos float como milisegundos ? Ejercicio". '@ al re&As) Buiero asignar a un entero un objeto de tipo 7iempo. int minutos = 718 << Error de compilacin.
C
o necesitan que se especifique el tipo del &alor de retorno+ 1a que este es precisamente EtipoF. Al ser operadores unitarios+ tampoco requieren argumentos+ porque se aplican al propio objeto. #l tipo p ede ser c al$ ier clase o estr ct ra%
G
19
11
Por supuesto, el nmero de parmetros, al igual que el tipo de retorno de la funcin depende de la decisin del programador.
else if(m < 0.1) j = 2; else j = 3; if(contador[i] > contador[j]) return contador[i]; else return contador[j]; }
1$
15.3 Repaso
)epaso Ja sobrecarga de operadores es simplemente otra forma que tenemos para reali2ar llamadas a funciones. Jos argumentos para estas funciones no aparecen entre parAntesis+ sino que rodean o siguen a los caracteres que siempre pensamos como operadores inalterables ! + + ++ + HI". En (++ es posible deTnir nue&os operadores que trabajen con clases. Esta deTnicion es e0actamente como la deTcin de una funcion ordinaria+ e0cepto que el nombre de la funcion consiste en la palabra reser&ada operator seguida del operador. #sta es la *nica di!erencia% El operador se con&ierte en una funcion como otra cualquiera que el compilador llama cuando &e el prototipo adecuado.
15
15.3 Repaso
)epaso o %a1 ra2on para sobrecargar un operador e0cepto si eso %ace al cdigo implicado con la clase m-s sencillo e intuiti&o de escribir 1 especialmente de leer. (uidado+ porque es tentador usar operadores Ppor todas partesQ. unca podremos sobrecargar operadores as/: 3ara rematar: Jeed el cap/tulo 1# del libro P3ensar en (++Q Jo &eremos en la parte de aspectos a&an2ados. 1 EE 58
16
15.4 Ejercicios
Clase Complejo Implementar la clase de los n4meros complejos sobrecargando operadores de forma que podamos usarla como se e0pone en el main!".
class Complejo { private: int real_; int imaginaria_; public: ....... } int main() Complejo a(1,1), b(2,2); Complejo c(b); cout << cout << cout << cout << c = a + cout << b = a cout << ++ c c -- Parte Parte b; c; c; b; << ++c; << c--; Imaginaria de c << c[1]; Real c << c[0];
1>
15.4 Ejercicios
Clase Persona Implementar la clase 3ersona sobrecargando los operadores =+ + 1 EE teniendo en cuenta que tienen punteros 1 que la suma de dos personas nos da otra persona cu1o nombre es la suma de los nombres de los sumandos 1 su altura es la ma1or de las dos alturas de los sumandos.
class Persona { private: int altura_; char* nombre_; public: ....... }
Tener en cuenta que hacen falta constructores, constructores copia y destructores. Hacer lo necesario para poder asignar un entero a una persona de forma que el nombre es esos casos sea Fabian y la altura sea la de la asignacin. Persona p(Pepe,3); p = 5; cout << p << endl; 1C