SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: Vndecid en Sábado 22 de Enero de 2011, 20:26

Título: Dudas BASICAS con C++
Publicado por: Vndecid en Sábado 22 de Enero de 2011, 20:26
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++
  1. ostream Objeto::operator << (Objeto const & cobjeto)
  2. {
  3.     ostream *salida;
  4.     *salida<<"Info: "<<cobjeto.inf<<" Info2: "<<cobjeto.inf<<endl;
  5.     return *salida;
  6. }
  7.  
  8.  
?

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++
  1. Objeto Objeto::operator =(Objeto const &objeto1)
  2. {
  3.     this->info=objeto1.info;
  4.     this->info2=objeto1.info2;
  5.  
  6.     return *this;
  7. }
  8.  
  9.  
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++
  1. friend ostream &operator << (ostream &,Objeto const &);
  2.  

Por que operator lleva un 'Et' adelante??
Título: Re: Dudas BASICAS con C++
Publicado por: Geo en Lunes 24 de Enero de 2011, 06:39
Estas dudas se resuelven en un buen libro de C++ :).

Título: Re: Dudas BASICAS con C++
Publicado por: Vndecid en Lunes 24 de Enero de 2011, 10:54
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
Título: Re: Dudas BASICAS con C++
Publicado por: m0skit0 en Lunes 24 de Enero de 2011, 11:39
Internet es mucho más que un libro... (http://www.learncpp.com/ (http://www.learncpp.com/" onclick="window.open(this.href);return false;))
Título: Re: Dudas BASICAS con C++
Publicado por: Vndecid en Lunes 24 de Enero de 2011, 13:58
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
Título: Re: Dudas BASICAS con C++
Publicado por: Vndecid en Lunes 24 de Enero de 2011, 14:03
Cita de: "m0skit0"
Internet es mucho más que un libro... (http://www.learncpp.com/ (http://www.learncpp.com/" onclick="window.open(this.href);return false;))

Saco una conclución mas antes de preguntar a profesores me parece que voy a tener que preguntar aca antes...
Título: Re: Dudas BASICAS con C++
Publicado por: Geo en Lunes 24 de Enero de 2011, 17:30
Cita de: "Vndecid"
1-Se hacen asi opr cuestion de rendimiento (y supongo yo de mayor entendimiento)
Que no sean funciones miembro es por cuestión de claridad o como mencionas, de  "entendimiento": para que puedan usarse con lo que estamos habituados, a poner el cout o el cin del lado izquierdo :).
Que sean funciones friend es por cuestión de rendimiento, para no "perder tiempo" en acceder a las variables privadas de la clase mediante funciones getVarible/obtenerVariable.

Cita de: "Vndecid"
Si estas cosas me las hubiesen explicado con anterioridad hubiese sido todo mucho mas facil
Recuerda, el autoaprendizaje es de las herramientas más valiosas en cualquier actividad, la escuela sirve para dar formalidad y buenas prácticas ;).
Título: Re: Dudas BASICAS con C++
Publicado por: ProfesorX en Lunes 24 de Enero de 2011, 19:10
Cita de: "Geo"
Recuerda, el autoaprendizaje es de las herramientas más valiosas en cualquier actividad, la escuela sirve para dar formalidad y buenas prácticas ;).

Amen hermano, has dicho una gran verdad.

Vndecid, esto no significa que debes desdeñar a tu maestros, ya que es imposible que sepan todo, (yo mismo sigo aprendiendo) aunque tampoco significa que debes quedarte solo con lo que te digan los maestros, un buen alumno investiga por su cuenta tambien, practica, y no deja de aprender.Recuerda esa frase que dice "El alumno debe superar al maestro".

Saludos :)
Título: Re: Dudas BASICAS con C++
Publicado por: Vndecid en Lunes 24 de Enero de 2011, 20:09
Cita de: "ProfesorX"
Cita de: "Geo"

Vndecid, esto no significa que debes desdeñar a tu maestros, ya que es imposible que sepan todo

Saludos :)

Me pusieron  en (numero tendiendo al 31 de Diciembre) una nota que no merezco en un final por 1/5 de la materia , si tienen la picardia de desaprobarme , ..entonces que se banquen si pregunto. Que me contesten y que se dejen de j...  :argh:  ahora me encuentro en la situacion de estudiar algo asi en con ...33º7 en mis vacaciones, no es que no sepan , es que estan (creo yo) de vacaciones
Título: Re: Dudas BASICAS con C++
Publicado por: Amilius en Lunes 24 de Enero de 2011, 21:34
Respecto del punto 2:

A menos que exista una buena razón siempre debes devolver una referencia al objeto, en lugar de un objeto. De lo contrario cada vez que retorne esa función llamará al constructor copia, haciéndola muy ineficiente.

Código: C++
  1.  
  2. Objeto& Objeto::operator=(Objeto const &objeto1)
  3. {
  4.     this->info=objeto1.info;
  5.     this->info2=objeto1.info2;
  6.     return *this;
  7. }
  8.  
  9.  

También es importante el "const" del parámetro "objeto1". Es bastante útil para que el compilador sepa que nuestra intención es no modificar el estado del parámetro. Sin embargo tienes que tener cuidado de declarar constantes los métodos que no modifiquen el estado de un objeto. Esto se hace agregando a la declaración del método un const inmediatamente después del cierre de paréntesis de parámetros. En casos especiales, como cacheo de acceso a datos, si necesitas modificar alguna variable en un método constante tienes que declararla como "mutable".
Título: Re: Dudas BASICAS con C++
Publicado por: Vndecid en Lunes 24 de Enero de 2011, 21:53
Cita de: "Amilius"
Respecto del punto 2:

A menos que exista una buena razón siempre debes devolver una referencia al objeto, en lugar de un objeto. De lo contrario cada vez que retorne esa función llamará al constructor copia, haciéndola muy ineficiente.

Código: C++
  1.  
  2. Objeto& Objeto::operator=(Objeto const &objeto1)
  3. {
  4.     this->info=objeto1.info;
  5.     this->info2=objeto1.info2;
  6.     return *this;
  7. }
  8.  
  9.  

También es importante el "const" del parámetro "objeto1". Es bastante útil para que el compilador sepa que nuestra intención es no modificar el estado del parámetro. Sin embargo tienes que tener cuidado de declarar constantes los métodos que no modifiquen el estado de un objeto. Esto se hace agregando a la declaración del método un const inmediatamente después del cierre de paréntesis de parámetros. En casos especiales, como cacheo de acceso a datos, si necesitas modificar alguna variable en un método constante tienes que declararla como "mutable".


Gracias Amillus  yo lo hacia con el this pero tenia la duda...Aunque te digo que no entendi mucho lo del const al final..vos me queres decir que en un metodo en el cual no se modifica ningun objeto tengo que poner un const al final de la declaracion (esto aparecio en mi final y todos estabamos  :wacko: