elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ¿Para qué funciona la sobrecarga de operadores?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Para qué funciona la sobrecarga de operadores?  (Leído 2,154 veces)
Rockstar97

Desconectado Desconectado

Mensajes: 28


Ver Perfil
¿Para qué funciona la sobrecarga de operadores?
« en: 20 Mayo 2015, 21:36 pm »

Pues eso, no sé para qué funciona la sobrecarga de operadores.
Me mandaron a hacer un reloj en C++ y me pidieron que pidiera la hora al usuario y dependiendo eso iba a ir incremento los segundos, luego los minutos y luego la hora, pero me han pedido que sobrecargue el ">>" y el "<<" y no sé para qué rayos querría yo sobrecargar esos operadores, si sencillamente pido los datos al usuario con un cin, un cout  y luego aplico la lógica "if(hora; hora<=24; hora++) y lo mismo haría con el minuto y los segundos... Por favor, alguien que me explique cómo y para qué se sobrecargan los operadores.


En línea

DarK_FirefoX


Desconectado Desconectado

Mensajes: 1.263


Be the change you wanna see in te world


Ver Perfil
Re: ¿Para qué funciona la sobrecarga de operadores?
« Respuesta #1 en: 20 Mayo 2015, 22:35 pm »

Sobrecargar los operadores te permite realizar una implementación distinta para esos operadores. Por ejemplo, si crearas una clase para almacenar Fechas, ¿que sentido tendria para ti hacer una suma (+) entre dos fechas? Si sobrecargas el operador de suma entre las dos fechas puedes darle un sentido y devolver un resultado que tu consideres correcto de acuerdo al significado que tu le quieras dar a la suma entre esas dos fechas.

Espero hayas entendido algo.
Salu2s


En línea

Rockstar97

Desconectado Desconectado

Mensajes: 28


Ver Perfil
Re: ¿Para qué funciona la sobrecarga de operadores?
« Respuesta #2 en: 20 Mayo 2015, 23:18 pm »

Vale, es lo sabía un poco y me ha quedado más claro... Ahora mi pregunta es la siguiente, si por ejemplo yo sobrecargo el operador ">>" de la siguiente manera:

Código
  1. friend istream& operator >> (istream& in , clase& a)
  2. {
  3. in>>a.nombre;
  4. return in
  5. }
  6.  
¿Cómo haría que lo muestre en el main? Eso es solo un ejemplo, la verdad es que me confundo mucho con eso.
En línea

Peregring-lk

Desconectado Desconectado

Mensajes: 50


Ver Perfil
Re: ¿Para qué funciona la sobrecarga de operadores?
« Respuesta #3 en: 21 Mayo 2015, 02:50 am »

Cuando tu escribes en el main algo como:

Código
  1. clase a;
  2. cin >> a; // (1)

El compilador sustituye la línea (1) por:

Código
  1. operator>>(cin, a);

Y el operador que has escrito manualmente es llamado de forma implícita.

De hecho, excepto para tipos primitos (enteros, chars, punteros), todo operador no es más que una función con un nombre especial (operator bla bla bla), y cuando utilizas el operador, éste siempre es sustituído por la forma con sintáxis de llamada a función (tú también podrías escribirlo así en el código si quisieras, pero por supuesto, ese no es el objetivo; para eso crearías una función y la llamarías por su nombre, mejor que con `operator>>(/* lo que sea*/`).

Bueno, en realidad es algo más complejo. El compilador sustituiría la llamada anterior por:

Código
  1. operator>>(cin, a); // (1)
  2.  
  3. // Pero tambien por:
  4. cin.operator>>(a); // (2)

Y se queda con la versión que exista de los dos. En tu caso, debido a que el `operator>>` es externo a la clase iostream (dado que no puedes modificar la clase `iostream` para añadirlo), la versión (2) falla al no existir tal método dentro de la clase `iostream`, luego solo queda la (1), que por supuesto, no falla dado que ya la has definido.

Si no hubiera sobrecarga adecuada ni para (1) ni para (2), ni siquiera tras posibles conversiones implícitas, o hubiese sobrecargas para ambas, se produciría el error de compilación pertinente.
« Última modificación: 22 Mayo 2015, 23:58 pm por Peregring-lk » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Sobrecarga de operadores (con punteros a clase)
Programación C/C++
Namida 0 3,060 Último mensaje 29 Diciembre 2010, 12:42 pm
por Namida
[Duda] Sobrecarga de operadores
Programación C/C++
BlackZeroX 4 2,769 Último mensaje 13 Junio 2011, 20:55 pm
por BlackZeroX
C++ - Sobrecarga de operadores
Programación C/C++
eltongabinghiman 2 2,735 Último mensaje 14 Marzo 2012, 18:14 pm
por x64core
problema con sobrecarga de operadores c++
Programación C/C++
swagger14 1 2,277 Último mensaje 4 Abril 2012, 22:26 pm
por david_BS
Sobrecarga de operadores en C#
.NET (C#, VB.NET, ASP)
DanielPy 3 3,522 Último mensaje 31 Julio 2013, 19:22 pm
por Novlucker
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines