Sei sulla pagina 1di 3

(6&8(/$32/,7e&1,&$1$&,21$/

&$55(5$'(,1*(1,(5Ë$'(6,67(0$6

352*5$0$&,Ï1,,

$OXPQR Adrián F. Vaca Cárdenas


&XUVR GR1
6HPHVWUH Octubre/2000 - Marzo/2000

)HFKDGHHQWUHJD: 07 - 12 - 2000

, 7HPD Uso de argumentos predeterminados en los constructores.

,, 3UREOHPD

El presente trabajo pretende dar indicaciones generales para el uso de


argumentos predeterminados en los constructores, así como su uso y la
forma de aplicarlos.

,,, ,QWURGXFFLyQ

Los constructores pueden tener argumentos predeterminados. Cuando se


proporciona argumentos predeterminados a los constructores se garantiza
que el objeto sea inicializado de una manera consistente, aun así no se
ha indicado valores en la llamada al constructor. Un constructor
proporcionado por el programador que tenga valores predeterminados para
todos sus argumentos (o que explícitamente no requiera argumentos)
también es un FRQVWUXFWRU SUHGHWHUPLQDGR, es decir un constructor que
puede ser llamado sin argumentos. Sólo puede haber un constructor
predeterminado por clase.
Ejemplo:

// Definición del tipo de dato abstracto Time


class Time{
int hour, minute, second;
public:
Time(int=0, int=0, int=0); // constructor predeterminado
void setTime(int, int, int);
void imprimir();
};

Time :: Time (int hr, int min, int sec){


hour=hr;
minute=min;
second=sec;
}

// Lo que sigue va dentro de main

Time t1, // todos los argumentos predeterminados


t2(2), // predeterminación de minute y second
t3(21, 34), // predeterminación de second
t4(12, 25, 32); // todos los valores especificados

Como se puede apreciar en la declaración de los objetos de la clase time,


van acompañados de valores, aquí se puede indicar cero, uno o más
valores, en el caso de que se quiera, por ejemplo especificar sólo el
segundo valor, se debe poner lo siguiente en la declaración:

t5(0, 4, 0);

De esta manera se especifican valores sólo cuando hace falta, lo que


asegura un control mayor sobre los datos

,9 'HVDUUROOR

Lo que sigue es el código fuente del programa.


Este programa es muy simple, se refiere a un punto del plano xy cuyo
valor es especificado en el momento de ser declarado y al que se agrega
una constante a cada coordenada, que es ingresada por el usuario;
finalmente se imprimen las coordenadas del nuevo punto para comprobar los
cambios.
Aquí se puede observar que hay un constructor predeterminado, que
inicializa a cero las coordenadas del punto.

#include<iostream.h>
#include<conio.h>

class punto {
float x, y;
public:
punto(float=0, float=0);
void aumentar(float, float);
void imprimir(void);
};

punto :: punto(float cx, float cy){


x=cx;
y=cy;
}

void punto :: aumentar(float c1, float c2){


x=x+c1;
y=y+c2;
}

void punto :: imprimir(void){


cout<<"(" <<x <<"," <<y <<")";
}

void main(void){
float cox, coy;
punto puntito(5.1, 8.3);
clrscr();

cout<<"El punto es: "; puntito.imprimir();


cout<<"\nIngrese la constante en x: "; cin>>cox;
cout<<"Ingrese la constante en y: "; cin>>coy;

puntito.aumentar(cox, coy);
cout<<"El nuevo punto es: "; puntito.imprimir();

getch();
}

9 &RQFOXVLRQHV\UHFRPHQGDFLRQHV

♣ Si una función miembro de una clase ya ofrece toda o una parte de la


funcionalidad que requiere un constructor (u otra función miembro) de
la clase, se debe llamar a la función desde el constructor (u otra
función miembro). Con esto se simplifica el mantenimiento del código y
se reduce la probabilidad de errores si se modifica el mismo.

♣ Se debe declarar los argumentos de función predeterminados sólo en el


prototipo de la función, dentro de la definición de la clase del
archivo de encabezado.

♣ Es un error especificar inicializadores predeterminados para la misma


función miembro tanto en un archivo encabezado como en la definición
de la función miembro.

Potrebbero piacerti anche