11/30/2005

Inicialización con constructores en C++

Como dijimos el constructor es la función que lleva el mismo nombre que la clase y que es llamada cada vez que un objeto de la clase es creado. En nuestra clase libro anterior hicimos que nuestro constructor deje los datos miembro en un estado consistente (es decir inicializados). La función constructor no puede devolver nada (ni siquiera void), aunque sí puede recibir parámetros. Esta característica puede ser aprovechada para inicializar con los datos que nosotros deseemos a un objeto en el momento de su creación. Escribamos entonces el código para la definición de la función de la clase Libro que reciba parámetros:

Libro::Libro(char *ptrTitulo, int cant, int cod)//constructor
{
establecerTitulo(ptrTitulo);
establecerPaginas(cant);
establecerCodigo(cod);
}

Como vemos nos aprovechamos de las funciones miembro set para establecer mediante el constructor los valores de los datos miembro. Ahora nuestro cliente podría crear un objeto de la clase de la siguiente manera:

Libro Manual("Historia Medieval",180,3453);

Argumentos predeterminados

Los argumentos predeterminados nos permiten específicar que argumentos le llegaran al constructor cuando un objeto es creado sin argumento o cuando algunos argumentos son omitidos. Los argumentos predeterminados deben incluírse en el prototipo del constructor en el siguiente código especifícamos los argumentos predeterminados para los valores enteros en 0, y para el título una cadena vacía:

Libro(char *="",int =0,int=0);//constructor de la clase libro

Ahora agreguemos lo dicho a nuestro ejemplo anterior, y además utilicemos la función strcpy para establecer el título y veamos cómo queda el código:

//archivo libro.h
//definicion de la clase
#ifndef LIBRO_H
#define LIBRO_H

class Libro {
 public:
  Libro(char* ="",int = 0, int = 0);
  void establecerTitulo(char *);
  void establecerPaginas(int);
  void establecerCodigo(int);
  void imprime();
 private:
  char Titulo[40];
  int Cantpaginas;
  int Codigo;
};//fin de la clase

#endif

//archivo: libro.cpp
//definicion de funciones miembro

#include <iostream>
using std::cout;
using std::endl;
#include <cstring> //para usar strcpy

#include "libro.h" //IMPORTANTE

Libro::Libro(char *ptrTitulo,int cant, int cod)//constructor
{
  establecerTitulo(ptrTitulo);
  establecerPaginas(cant);
  establecerCodigo(cod);
}
void Libro::establecerTitulo(char *ptrTitulo)//Modificada (usa strcpy ahora)
{
  strcpy(Titulo,ptrTitulo);
}
void Libro::establecerPaginas(int cant)
{
  Cantpaginas = cant;
}
void Libro::establecerCodigo(int cod)
{
  Codigo = cod;
}
void Libro::imprime()
{
  cout << "Titulo: " << Titulo << endl;
  cout << "Codigo: " << Codigo << endl;
  cout << "Cant pag: " << Cantpaginas << endl;
}

//ejemplo.cpp
//PROGRAMA
#include "libro.h"
int main()
{
  Libro Manual;//creo el obj argumentos predeterminados.
  Manual.imprime();
  Libro ManualB("Biologia",878,100);//creo otro objeto con argumentos.
  ManualB.imprime();
}
Compilar este programa

No hay comentarios.: