SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: Alfonsos1 en Jueves 30 de Septiembre de 2010, 21:58

Título: Darle un valor a una var dentro de la definicion de una clas
Publicado por: Alfonsos1 en Jueves 30 de Septiembre de 2010, 21:58
Tengo una clase en la que inicialice una variable, pero quiro darle un valor a esa variable dentro de la definicion de la clase, para que cada ves que se cree un objeto la variable comience con un valor.

quiero que cada ves que se cree un objeto de "miclase", que comience con una variable "mivariable" igual a 4

seria algo asi:

class miclase
{
 public:
   int mivariable;
   mivariable=4;
};

pero eso me da error...
Título: Re: Darle un valor a una var dentro de la definicion de una clas
Publicado por: ProfesorX en Viernes 1 de Octubre de 2010, 01:03
Dale valor a tu variable dentro del metodo costructor de tu clase. Si no sabes que es un constructor, investiga sobre constructores y destructores en C++, solo te dire que el metodo costructor de una clase debe llevar estrictamente como nombre, el nombre de tu clase, asi se diferencia de los demas metodos de una clase:

Código: C++
  1.  
  2. class miclase
  3. {
  4. public:
  5.     int mivariable;
  6.  
  7.     // Este metodo es el constructor, si te fijas
  8.     // tiene el mismo nombre que tu clase
  9.     miclase()
  10.     {
  11.         mivariable = 4;
  12.     }
  13.  
  14. };
  15.  
  16.  
  17.  

Saludos :)
Título: Re: Darle un valor a una var dentro de la definicion de una clas
Publicado por: Alfonsos1 en Viernes 1 de Octubre de 2010, 15:37
ahora si!  :good:
Título: Re: Darle un valor a una var dentro de la definicion de una clas
Publicado por: alb en Sábado 2 de Octubre de 2010, 09:45
Holà,
Para darle valor en el constructor, suele hacerse con una inicializacion-list :
Código: C++
  1. class my_class
  2. {
  3.     public:
  4.     my_class():my_var(4)
  5.     {}
  6.    
  7.     private:
  8.     int my_var;
  9. };
  10.  
Cuando se escribe :
Código: C++
  1. my_class::my_class()
  2. {
  3.    my_var = value;
  4. }
  5.  
lo que pasa es :
1/ construcion del objecto my_var antes de entrar el constructor de my_class
2/ llamada al operador= para darle valor.

Sin embargo, al escribir :
Código: C++
  1. my_class::my_class():my_var(value)
  2. {}
  3.  
solo hay :
1/ llamada al constructor de my_var con el buen valor.

Con los tipos basicos (int, char, short, double, etc...), las dos escrituras son iguales porque construir my_var no cuesta nada. Pero accostumbrarse a escribir lo con inicializacion-list permitira hacerlo sin pensar cuando el typo no sera tan basico.

Otra cosa :
En la futura norma (C++0x) serà valido escribir algo cierca de lo que querias :
Código: C++
  1. class my_class
  2. {
  3. public :
  4.    my_class()
  5.    {// aquì i==4
  6.    }
  7.  
  8. private:
  9.    int i = 4;
  10. };
  11.