Ver Mensaje Individual
  #4 (permalink)  
Antiguo 04/12/2012, 08:28
fightmx
 
Fecha de Ingreso: febrero-2003
Ubicación: D.F.
Mensajes: 163
Antigüedad: 21 años, 2 meses
Puntos: 22
Respuesta: Duda con constructor C++

Puedes leer un poco aquí.

Para que te quede un poco más claro supón que tienes la siguiente clase:

Código C++:
Ver original
  1. class MyInt{
  2.     public:
  3.     MyInt(int n){}
  4. };

Como puedes ver, la única forma de construir un objeto MyInt es pasando un parámetro int al constructor, esto es:

Código C++:
Ver original
  1. MyInt mi(3); // bien!
  2. MyInt mi; // mal! No hay definido un constructor por defecto

Ahora supón que tienes otra clase que utiliza un objeto de MyInt:

Código C++:
Ver original
  1. class MyInt{
  2.     public:
  3.     MyInt(int n){}
  4. };
  5.  
  6. class Other{
  7.     MyInt mi;
  8.     public:
  9.     Other(){}
  10. };
  11.  
  12. int main(){
  13.     Other ot;
  14. }

Intenta correr éste último código, aparentemente está bien, pero verás que el compilador intenta inicializar el objeto MyInt con el constructor por defecto (cosa que ya vimos no es posible). Ahora, intenta hacerlo como dices (en el cuerpo del constructor de la clase Other), ¿Qué pasa? ¿Tampoco verdad? Bien, para eso tienes la lista de inicializadores del constructor, para cuando necesitas inicializar objetos justo antes de entrar al cuerpo del constructor:

Código C++:
Ver original
  1. class MyInt{
  2.     public:
  3.     MyInt(int n){}
  4. };
  5.  
  6. class Other{
  7.     MyInt mi;
  8.     public:
  9.     Other(): mi(5){}
  10. };
  11.  
  12. int main(){
  13.     Other ot;
  14. }

Por último, lo que sucede con los tipos primitivos es que puedes inicializarlos de ambas formas:

Código C++:
Ver original
  1. int n = 10; //asigna 10 a n
  2. int m(10); //asigna 10 a m

Por lo que fácilmente podrás encontrar ejemplos por el estilo de:

Código C++:
Ver original
  1. class MyInt{
  2.     int n;
  3.     public:
  4.     MyInt(int i) : n(i) {}
  5. };