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);