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 originalclass POO
{
public:
// Constructor por defecto
POO( )
: variable( 0 )
{ }
// Constructor copia
POO( const POO& otro )
: variable( otro.variable )
{ }
// Constructor personalizado
POO( int var )
: variable( var )
{ }
int Variable( ) const
{ return variable; }
void SetVariable( int variable )
{ this->variable = variable; }
private:
int variable;
};
int main( )
{
// Ejemplos de llamadas al constructor por defecto
POO def01;
POO def02 = POO( );
POO def03( );
// Constructor copia
POO cop01 = POO( def01 );
POO cop02( def02 );
POO cop03 = def02;
// Constructor personalizado
POO per01 = POO( 3 );
POO per02( 34 );
}
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?