Las funciones son una interface a través de la cual se manipulan los datos almacenados en una clase. Usando estos métodos, podemos manipular y extraer datos de un objeto Caja sin saber qué tipos de datos se usan para almacenar los datos. Esto se conoce como encapsulación de datos, y es un concepto muy importante en la programación orientada a objetos. Encapsulación es la habilidad de una parte de un programa para ocultar sus datos al resto del código, impidiendo así accesos incorrectos o conflictos con los nombres de otras variables.
En el ejemplo anterior, cada clase tenía sólo una
sección, etiquetada como public. Pero podemos utilizar también
la etiqueta private. Así, la palabra public
define hace que los campos
(variables o funciones) que le siguen en la clase
puedan ser accedidas desde cualquier parte del programa, mientras
que la palabra private
indica que los campos que le siguen sólo son
accesibles por el código que forma parte de la misma clase.
Si no se indica lo contrario, por defecto en una clase todos los elementos
son privados. Veamos un ejemplo:
class Caja {
void Caja :: set (double dim1, double dim2, double dim3)
void Caja :: print (void)
double Caja:: getLongitud (void)
main ()
pequeña.set(5, 4, 10);
pequeña.print();
longitud = grande.getLongitud();
# include <iostream.h>
La ventaja de las funciones miembro es que la función llamada puede automáticamente
acceder a los datos del objeto para el cual fue llamado. Así, en
double longitud, anchura, altura;
public:
void set (double dim1, double dim2, double dim3);
void print (void);
double getLongitud (void);
};
{
longitud = dim1;
anchura = dim2;
altura = dim3;
};
{
cout << "longitud = " << longitud <<'\n';
cout << "anchura = " << anchura <<'\n';
cout << "altura = " << altura <<'\n';
};
return longitud;
};
{
double longitud;
Caja pequeña, mediana, grande;
mediana.set (10, 6, 20);
grande.set (20, 10, 30);
mediana.print();
grande.print();
cout << "longitud de la caja grande = " << longitud
<<'\n';
}grande.print()
,
el objeto grande es el 'substrato': las variables longitud, altura y anchura
que son
utilizadas en el código de la función se refieren al objeto grande
.
class Caja {
void Caja :: set (double dim1, double dim2, double dim3)
double Caja:: volumen (void)
main ()
pequeña.set(5, 4, 10);
cout << "El volumen de la caja grande es " << grande.volumen()
<< '\n';
# include <iostream.h>
Esto impide que al calcular el volumen de una caja mezclemos las dimensiones de dos objetos
distintos. Dado que es una función con poco código, podemos definirla dentro de la
declaración de clase:
double longitud, anchura, altura;
public:
void set (double dim1, double dim2, double dim3);
double volumen (void);
};
{
longitud = dim1;
anchura = dim2;
altura = dim3;
};
return longitud * anchura * altura;
};
{
double longitud;
Caja pequeña, mediana, grande;
mediana.set (10, 6, 20);
grande.set (20, 10, 30);
}
class Caja {
void Caja :: set (double dim1, double dim2, double dim3)
main ()
pequeña.set(5, 4, 10);
}
# include <iostream.h>
double longitud, anchura, altura;
public:
void set (double dim1, double dim2, double dim3);
double volumen (void) {return longitud * anchura * altura;}
};
{
longitud = dim1;
anchura = dim2;
altura = dim3;
};
{
double longitud;
Caja pequeña, mediana, grande;
mediana.set (10, 6, 20);
grande.set (20, 10, 30);