Programación General > C/C++

 Dudas BASICAS con C++

(1/3) > >>

Vndecid:
Hola a todos tengos unas dudas con C++ que nadie me respondio hasta ahora( (amigos que sabian c++ pero que no me respondieron bien,mails a profesores que no me constestaron .... :hitcomp: ) y quisiera que me la respondan

1)Sobrecarga << y amigas
¿Por que para poder utilizar la sobrecarga de operadores << y << debo usar funciones amigas y no puedo usar algo como esto:


--- Código: C++ ---ostream Objeto::operator << (Objeto const & cobjeto){    ostream *salida;    *salida<<"Info: "<<cobjeto.inf<<" Info2: "<<cobjeto.inf<<endl;    return *salida;}  ?

Se que las funciones amigas tienen un pleno "alcance" sobre las variables privadas de la clase pero por que DEBEN ser amigas
y no una funcion como cualquier otra?


2)Operator =
Objeto operator= (Objeto const &)

por que tengo que devolver un objeto Objeto si


--- Código: C++ ---Objeto Objeto::operator =(Objeto const &objeto1){    this->info=objeto1.info;    this->info2=objeto1.info2;     return *this;}   estoy copiando la informacion en this ...?¿No deberia ir un void?
Nota:
    Note que si se realiza objeto1=obeto2 declarar void operator =(Objeto const &) es correcto pero no si lo que deseo hacer es objeto1=objeto2=objeto3
    en el ultimo caso funciona poniendo Objeto operator =(Objeto const &objeto1) pero no entiendo el por que de esto


3)Dudas con & operator


--- Código: C++ ---friend ostream &operator << (ostream &,Objeto const &); 
Por que operator lleva un 'Et' adelante??

Geo:
Estas dudas se resuelven en un buen libro de C++ :).


* Los operadores << y >> puedes sobrecargarlos como desees, tanto como funciones miembro como funciones globales que pueden declararse como amigas. Pero, para el caso del ejemplo que pones, en el que se trata de enviar datos a un ostream, si se sobrecargara el operador como función miembro, el primer operando debería ser un objeto o referencia a la clase de la cual es miembro el operador, y tendrías que escribir algo como esto:

--- Código: Text --- instanciaObjeto << cout   en lugar del habitual:

--- Código: Text --- cout << instanciaObjeto  Para poder escribir el segundo código (lo más "habitual" en C++), se usa una función no miembro porque el objeto no es el operando "más a la izquierda". Por otro lado, el ejemplo que pones de sobrecarga del operador << es incorrecto porque el parámetro debería ser un tipo ostream. Por último, estas funciones se hacen amigas por cuestión de rendimiento, es más rápido que puedan acceder de manera directa a las variables miembro de la clase que utilizar las funciones de acceso de dicha clase.
* El operador = es binario, es decir, recibe dos operandos, por lo que para la operación
objeto1 = objeto2 = objeto3
el compilador ve esto:
objeto1 = ( objeto2 = objeto3 )
Si el operador = devolviera void la última operación resultaría en objeto1 = void.
* Misma razón que el punto anterior, para que puedas "encadenar" instrucciones.
* Es difícil adivinar. No sabemos si cadena contiene algo o no, si el problema es el operador + que no devuelve lo adecuado...

Vndecid:
Todavia no lei el mensaje ..te lo agradezco ...pero tambien le pregunto a mis profes pior un libro que no sea el Deitel & Deitel (que me aburre de sobremanera de c++) pero no me respondieron

m0skit0:
Internet es mucho más que un libro... (http://www.learncpp.com/)

Vndecid:
Entonces
1-Se hacen asi opr cuestion de rendimiento (y supongo yo de mayor entendimiento)
2-Excelente sospechaba que era algo asi
3-Entonces el & esta para que pase la direccion del ostream anterior es decir para poder hacer esto cout<<objeto<<objeto2
4-Lo borre por que creo que me anduvo .

Si estas cosas me las hubiesen explicado con anterioridad hubiese sido todo mucho mas facil

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa