Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: mayistik en 4 Febrero 2014, 18:02 pm



Título: Duda Constructores C++
Publicado por: mayistik en 4 Febrero 2014, 18:02 pm
Saludos X)...

Compa~neros tengo una duda.... cuando uso un constructor para inicializar un objeto, los datos del parametro del objeto se guardan en el dato miembro de la clase... y si es asi, que pasa cuando creo mas de un objeto y lo inicializo tambien, tambien se guarda el valor inicial en el dato miembro ... osea el dato miembro guarda 2 valores al tiempo? Ejm:

// Este programa desarrolla el ejercicio de la figura 3.7 CAPITULO 3

#include <iostream>
#include <string>

using namespace std;

class LibroCalificaciones
{
public:
   //Constructor
   LibroCalificaciones (string nombre){

      nombreCurso = nombre;
   };

   //Funcion para obtener el nombre del curso;
   string obtenerNombreCurso (){

      return nombreCurso;
   };

private:
   //Dato miembro
   string nombreCurso;

};

int main (){

   LibroCalificaciones oLibroCalificaciones1 ("valor string numero 1");
   LibroCalificaciones oLibroCalificaciones2 ("valor string numero 2");

   cout << "oLibroCalificaciones1 se creo para el curso \n" << oLibroCalificaciones1.obtenerNombreCurso();

   cout << "oLibroCalificaciones2 se creo para el curso \n" << oLibroCalificaciones2.obtenerNombreCurso();

   cout << "Quiero mostrar el valor dato miembro para el objeto oLibroCalificaciones1 de nuevo" << oLibroCalificaciones1.obtenerNombreCurso();


   return 0;
}


en este caso el dato miembro ---> (nombreCurso) tendria asignado dos valores... (valor string numero 1) y (valor string numero 2) ? GRACIAS DE ANTEMANO


Título: Re: Duda Constructores C++
Publicado por: El Benjo en 4 Febrero 2014, 18:35 pm
No, tú lo estás viendo como si la clase en si misma fuera un objeto y esto no es así. Lo que ocurre cuando creas un objeto es que creas un objeto con las propiedades y métodos de la clase. Vamos, que la clase en sí sólo es una plantilla para los objetos que crearás después; la clase no se altera modifica para nada cuando asignas valores ni cuando creas objetos de dicha clase.


Título: Re: Duda Constructores C++
Publicado por: mayistik en 4 Febrero 2014, 18:38 pm
Gracias por la respuesta... tienes razon, ahora lo veo  ;-), pero entonces los parametros que envio al crear el objeto, donde se guardan ? :(


Título: Re: Duda Constructores C++
Publicado por: El Benjo en 4 Febrero 2014, 18:45 pm
Se guardan en una variable del tipo de ese objeto. Es decir que cuando tú creas el objeto se asigna memoria suficiente para guardar las variables que corresponden a las que tú declaras en el objeto. Si por ejemplo tu clase fuera así:

Código
  1. class LibroCalificaciones
  2. {
  3. int Numero1
  4. int Numero2
  5. int Numero3
  6. }

Entonces cuando tú creas un nuevo objeto de esa clase se reserva memoria para tres variables de tipo "int".

El la siguiente imagen se ilustra una clase que se llama "Contacto" y se crean tres objetos de ese tipo. Ahí puedes ver como cada objeto guarda sus propios valores.

Editado: No te había adjuntado la imagen. XD
http://zilargi.files.wordpress.com/2009/12/cuadradino1.png?w=300 (http://zilargi.files.wordpress.com/2009/12/cuadradino1.png?w=300)


Título: Re: Duda Constructores C++
Publicado por: mayistik en 4 Febrero 2014, 18:48 pm
Ya entiendo  ;-)... Mil Gracias  bro...


Título: Re: Duda Constructores C++
Publicado por: Yoel Alejandro en 5 Febrero 2014, 00:35 am
Escucha, no, no se sobrescriben los valores (los diseñadores del lenguaje C++ no fueron tan tontos, jeje  :rolleyes:)

Cada objeto o "instancia" de una clase tiene su espacio privado de variables, es decir, su porción específica e INDIVIDUAL de memoria asignada a sí mismo dentro del programa. Si creas dos objetos:

Código:
LibroCalificaciones oLibroCalificaciones1 (string_1);
LibroCalificaciones oLibroCalificaciones2 (string_2);

pues cada uno tiene su propia variable nombreCurso, independiente de la del otro objeto. Puede asignar un valor al nombreCurso del primer objeto, y otro valor al nombreCurso del segundo objeto, sin ningún problema.

Espero haberte aclarado .... :)


Título: Re: Duda Constructores C++
Publicado por: mayistik en 5 Febrero 2014, 03:53 am
Si amigo... mas que claro  ;D Gracias