Ver Mensaje Individual
  #2 (permalink)  
Antiguo 21/04/2015, 00:53
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: ¿Cómo resolver este ejercicio?

Dudo que nadie te resuelva el ejercicio. Una cosa es ayudarte con una duda y otra ponerte el código completo sin que tú hayas escrito una sola línea.

Un constructor no es más que una función especial que se ejecuta cada vez que se crea una nueva instancia de un objeto. Su función es, simplemente, establecer una configuración inicial estable del objeto (por ejemplo inicializar memoria dinámica, establecer valores iniciales de variables, poner punteros no válidos a null y cosas así). SIEMPRE que, en C++, se cree un elemento basado en una clase o una estructura se va a llamar a un constructor ¿a cual? Depende. Hay dos tipos de constructores: básicos y personalizados.

Constructores básicos:

Los constructores básicos son una serie de constructores que, por defecto, siempre van a estar disponibles. Si no se programa explícitamente un constructor básico el compilador va a crear una versión del mismo.
  • Constructor por defecto: No tiene argumentos.
  • Constructor copia: Un argumento, que es una referencia a un objeto de la misma clase. Realiza una copia del objeto pasado como argumento.
  • Constructor "move": Constructor nuevo en C++11 y posteriores. Similar al constructor copia, de momento lo dejamos ahí.

Constructores personalizados:

Los constructores personalizados engloban el resto de constructores que definas. Su finalidad es proporcionar un punto de entrada sencillo para crear el objeto, teniendo en cuenta las necesidades específicas de dicho objeto.

Ejemplo:

Código C++:
Ver original
  1. class POO
  2. {
  3.   public:
  4.  
  5.     // Constructor por defecto
  6.     POO( )
  7.       : variable( 0 )
  8.     { }
  9.  
  10.     // Constructor copia
  11.     POO( const  POO& otro )
  12.       : variable( otro.variable )
  13.    { }
  14.  
  15.     // Constructor personalizado
  16.     POO( int var )
  17.       : variable( var )
  18.     { }
  19.  
  20.     int Variable( ) const
  21.     { return variable; }
  22.  
  23.     void SetVariable( int variable )
  24.     { this->variable = variable; }
  25.  
  26.   private:
  27.  
  28.     int variable;
  29. };
  30.  
  31. int main( )
  32. {
  33.   // Ejemplos de llamadas al constructor por defecto
  34.   POO def01;
  35.   POO def02 = POO( );
  36.   POO def03( );
  37.  
  38.   // Constructor copia
  39.   POO cop01 = POO( def01 );
  40.   POO cop02( def02 );
  41.   POO cop03 = def02;
  42.  
  43.   // Constructor personalizado
  44.   POO per01 = POO( 3 );
  45.   POO per02( 34 );
  46. }

Por tanto, tenemos que poner un énfasis especial en los siguientes puntos:
  • Siempre que se crea una nueva instancia de un objeto se llama a un constructor
  • El constructor debe asegurar que el objeto creado se puede usar de forma segura (variables inicializadas)
  • Los constructores de una clase admiten sobrecarga
  • El constructor que acabe siendo llamado dependerá de los argumentos usados para crear el objeto

¿Dudas?