Sábado 14 de Diciembre de 2024, 19:04
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Sobrecarga De Operadores
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Sobrecarga De Operadores (Leído 1075 veces)
AnioN
Miembro MUY activo
Mensajes: 339
Sobrecarga De Operadores
«
en:
Jueves 21 de Junio de 2007, 14:56 »
0
Hola, estoy buscando un texto que explique bien la sobrecarga de operadores en C++, no me quedan claras algunas cosas todavia referidas. Por ej no se cuando tienen que ser declarados como friend y cuando no. Ademas de la sobrecarga de los flujos de i/o. Lo que me quedo en duda es que lei por ahi que el compilador los interpreta como de funciones se tratase.
Alguien me puedo aclarar estas dudas?
Por ej este codigo:
Código: Text
#include <iostream>
using namespace std;
struct complejo {
float a,b;
};
/* Prototipo del operador + para complejos */
complejo operator +(complejo a, complejo b);
int main() {
complejo x = {10,32};
complejo y = {21,12};
complejo z;
/* Uso del operador sobrecargado + con complejos */
z = x + y;
cout << z.a << "," << z.b << endl;
cin.get();
return 0;
}
/* Definición del operador + para complejos */
complejo operator +(complejo a, complejo b) {
complejo temp = {a.a+b.a, a.b+b.b};
return temp;
}
Aclara que puede ser usado en su notacion funcional, de la sig manera:
Código: Text
z = operator+(x,y);
Este otro ejemplo:
Código: Text
#include <iostream>
using namespace std;
class Tiempo {
public:
Tiempo(int h=0, int m=0) : hora(h), minuto(m) {}
void Mostrar();
Tiempo operator+(Tiempo h);
private:
int hora;
int minuto;
};
Tiempo Tiempo::operator+(Tiempo h) {
Tiempo temp;
temp.minuto = minuto + h.minuto;
temp.hora = hora + h.hora;
if(temp.minuto >= 60) {
temp.minuto -= 60;
temp.hora++;
}
return temp;
}
void Tiempo::Mostrar() {
cout << hora << ":" << minuto << endl;
}
int main() {
Tiempo Ahora(12,24), T1(4,45);
T1 = Ahora + T1; // (1)
T1.Mostrar();
(Ahora + Tiempo(4,45)).Mostrar(); // (2)
cin.get();
return 0;
}
Que pasa si yo declaro al operador como friend?
Tweet
SteelX
Miembro MUY activo
Mensajes: 218
Re: Sobrecarga De Operadores
«
Respuesta #1 en:
Jueves 21 de Junio de 2007, 22:47 »
0
los Operadores sobrecargados son funciones que usan un operador para su llamado, si tu declaras una función friend quiere decir que tienes acceso a los datos miembros de la clase.
Citar
Código: Text
z = operator+(x,y);
solo eso, puedes llamarlo tanto
Código: Text
z = a + b;
o
z operator+(a,b);
http://codigomaldito.blogspot.com/2005/12/...nes-friend.html
es una página donde tienen una buena explicación al respecto.
Inside the code
AnioN
Miembro MUY activo
Mensajes: 339
Re: Sobrecarga De Operadores
«
Respuesta #2 en:
Viernes 22 de Junio de 2007, 00:32 »
0
y como seria llamarlo en forma fucional a los operadores << y >> ?
por ej:
Código: Text
class punto
{
int x,y;
public:punto() {x=y=0;}
punto (int xx,int yy) { x=xx;y=yy;}
void fijarx(int xx) { x=xx;}
void fijary(int yy) {y=yy;}
int leerx() {return x;}
int leery() {return y;}
friend ostream& operator << (ostream& os,const punto &p);
friend istream& operator >> (istream& is,const punto &p);
};
void main()
{
punto p;
cout<<p<<endl;
p.fijarx(50);
p.fijary(100);
cout<<p<<endl;
cout <<"introducir los valores de x e y\n";
cin>>p;
cout<<"se ha introducido"<<p;
}
ostream& operator<<(ostream &os,punto &p)
{
os <<"x= "<<p.x<<",y= "<<p.y;
return os;
}
istream& operator>>(istream &is,punto &p)
{
is >>p.x>>p.y;
return is;
}
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Sobrecarga De Operadores