BUSCAR
INDICE
INDICE DEL TEMA
OBJETIVOS
TEORIA
PALABRAS RESERVADAS
GLOSARIO
EJERCICIOS
RESUELTOS
AUTOEVALUACION
PROPUESTOS
ERRORES
ESTADISTICAS
INICIO
FAQS
LINKS
RECOMIENDANOS
QUIENES SOMOS
MAPA DEL WEB
COLABORAR
Tema 22 Constructores y Destructores
Teoría: Introducción

Ya se ha apuntado que C++ no permite crear objetos sin dar un valor inicial apropiado a todas susvariables miembro. Esto se hace por medio de unas funciones llamadas constructores, que se llaman automáticamente siempre que se crea un objeto de una clase.

Se van a estudiar ahora algunas formas posibles de crear e inicializar objetos, tales como c1. Una primera manera en la que se podría hacer esto bien pudiera ser ésta:

C_Cuenta c1; // se crea el objeto
c1.Saldo = 500.0; // se da valor a sus variables miembro
c1.Interes= 10.0;

Este método, a pesar de ser correcto, viola el principio de encapsulación al manejar directamente las variables miembro. Al igual que sucede con los arrays y cadenas de caracteres, C y C++ también permiten declarar e inicializar las variables de la siguiente manera (más compacta, que es una inicialización):

C_Cuenta c1 = { 500.0, 10.0 };

Los valores que aparecen entre las llaves son asignados a las variables miembro de la clase o estructura, en el mismo orden en que esas variables aparecen en la declaración de esa clase. De todos modos, esta forma de declarar las variables incumple también el principio de encapsulación, que es uno de los objetivos de la programación orientada a objetos.

Para permitir la creación de objetos siendo fieles a la encapsulación se utilizan los constructores. Estos son unas funciones miembro de una clase especiales que se llaman de modo automático al crear los objetos, y dan un valor inicial a cada una de las variables miembro. El nombre del constructor es siempre el mismo que el nombre de la clase. Así el constructor de la clase C_Cuenta se llamará, a su vez, C_Cuenta. Además, los constructores se caracterizan porque
se declaran y definen sin valor de retorno, ni siquiera void. Utilizando las capacidades de sobrecarga de funciones de C++, para una clase se pueden definir varios constructores.

El uso del constructor es tan importante que, en el caso de que el programador no defina ningún constructor para una clase, el compilador de C++ proporciona un constructor de oficio (también llamado a veces por defecto, aunque como más tarde se verá que esta terminología puede resultar confusa).

Si la clase C_Cuenta se completa con su constructor, su declaración quedará de la siguiente forma:

Conviene insistir en que el constructor se declara y define sin valor de retorno, y que en una clase puede haber varios constructores, pues como el resto de las funciones puede estar sobrecargado. La definición del constructor de la clase C_Cuenta pudiera ser la que a continuación se presenta:

C_Cuenta::C_Cuenta(double unSaldo, double unInteres)
{
// La clase puede hacer llamadas a los métodos
// previamente definidos
SetSaldo(unSaldo);
SetInteres(unInteres);
}

Teniendo en cuenta que el constructor es una función miembro, y que como tal tiene acceso directo a las variables miembro privadas de la clase (sin utilizar los operadores punto o flecha), el constructor también podría definirse del siguiente modo:

C_Cuenta::C_Cuenta(double unSaldo, double unInteres)
{
// El constructor accede a las variables miembro y les asigna el
// valor de los parámetros
Saldo = unSaldo;
Interes = unInteres;
}