C/Visual C - Sobrecarga de Operadores C++

 
Vista:

Sobrecarga de Operadores C++

Publicado por BluSky (10 intervenciones) el 13/08/2003 22:01:00
Un par de preguntas sobre el particular:
1. Si tengo en una clase A, sobrecargado el operador de asignación (operator=) ¿cómo me interesa más declararlo?: como void o como const &A.
2. Necesito sobrecargar el operador de inserción para una clase de manera que haga cosas diferentes según sea utilizado. Me explico:
Lista << 3 Añadiríra un 3 al final de una lista
3 << Lista Añade un 3 al principio de la lista
¿es esto posible? ¿cómo?
Saludos
Sebas
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Sobrecarga de Operadores C++

Publicado por chuidiang (677 intervenciones) el 14/08/2003 09:12:05
Contestaciones

1. Supon que a,b,c y d son instancias de la clase A. Si lo declaras como void no puedes hacer esto
a=b=c=d;
Si lo declaras como const &A, si puedes. Que yo sepa es la única diferencia y el motivo por el que se suele declarar const &A

2. Creo que con Lista << 3 no tienes ningun problema. sobrecargas en la clase Lista el operator << de la forma habitual.
Para 3 << Lista debes hacer un operador global. Es decir, debes declarar una funcion que no pertenezca a ninguna clase que sea del estilo

Lista & operator << (int a, Lista &l); /* Tengo dudas con la sintaxis, pero espero que captes la idea */

Desde esta función global, como no es metodo de Lista, no tienes acceso a las interioridades de lista, debes manejar sus metodos y atributos publicos.

Si en la clase Lista declaras esta funcion como amiga (friend), entonces si tendrás acceso dentro de la función a las interioridades de la lista y podras acceder directamente a sus atributos y metodos protegidos.

Al igual que en el punto 1, si haces que esta funcion global devuelva void, no podras hacer

3 << 4 << 5 << Lista;

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Sobrecarga de Operadores C++

Publicado por BluSky (28 intervenciones) el 14/08/2003 14:55:12
La contestación a la primera pregunta alto y claro.
La idea en cuanto a la segunda, creo, captarla. Esta tarde probaremos a ver...

Gracias de nuevo

Sebas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 11
Ha aumentado su posición en 5 puestos en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

RE:Sobrecarga de Operadores C++

Publicado por zzzzz (318 intervenciones) el 14/08/2003 23:05:56
Chuidang lo que tu dices de que si declaras como void no puedes hacer esto a=b=c=d; a eso de que a es igual a b y b es igual a c y c es igual a d, se le llama operadores en cascada y esto es permitido cuando regresar el objeto blanco que es *this, eso es lo que permite asignar operadores en casacada, bueno eso es lo que me dijeron.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Sobrecarga de Operadores C++

Publicado por chuidiang (677 intervenciones) el 16/08/2003 00:26:17
Efectivamente, para poder hacer eso debes devolver *this, y por ello debes devolver una referencia a la clase. No puedes devolver void ( o sea, no devolver nada) si quieres mantener esta caracteristica.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar