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 18 Clases: Definiciones
Teoría: Clase con secciones privadas

Las declaraciones de variables y funciones miembro de la clase C_Cuenta del siguiente ejemplo están divididas en dos grupos, encabezados respectivamente por las palabras private: y public:.

Habitualmente las variables miembro suelen ser privadas y algunas funciones miembro públicas,pero ya se verán todo tipo de combinaciones posibles.

class C_Cuenta {

// Variables miembro
private:

char *Nombre; // Nombre de la persona
double Saldo; // Saldo Actual de la cuenta
double Interes; // Interés aplicado

public:

// Métodos
char *GetNombre()
{ return Nombre; }
double GetSaldo()
{ return Saldo; }
double GetInteres()
{ return Interes; }
void SetSaldo(double unSaldo)
{ Saldo = unSaldo; }
void SetInteres(double unInteres)
{ Interes = unInteres; }
void Ingreso(double unaCantidad)
{ SetSaldo( GetSaldo() + unaCantidad ); }

};

Una primera diferencia respecto a los ejemplos anteriores es que se ha sustituido la palabra struct (bien conocida en C) por la palabra class, que es propia de C++. Ambas palabras pueden ser utilizadas en la definición de las clases de C++. Enseguida se verá la pequeña diferencia que existe entre utilizar una palabra u otra.

La palabra private precediendo a la declaración de las variables o funciones miembro indica al compilador que el acceso a dichos miembros sólo está permitido a las funciones miembro de la clase, de forma que cualquier otra función o el programa principal, tienen prohibido acceder a ellas mediante los operadores punto (.) y flecha (->), y de cualquier otra forma que no sea a través de las funciones miembro de la clase que sean public.

La palabra public precediendo a la declaración de las funciones o variables miembro indica que dichas funciones podrán ser llamadas desde fuera de la clase mediante el procedimiento habitual en C para acceder a los miembros de las estructuras, es decir mediante los operadores punto (.) y flecha (->).

No es necesario poner las dos palabras public y private. Se tienen las dos opciones siguientes:

1. Definiendo la clase con la palabra struct la opción por defecto es public, de modo que todas las variables y funciones miembro son public excepto las indicadas expresamente como private.

2. Por el contrario, utilizando la palabra class la opción por defecto es private, de modo que todas las variables y funciones miembro son private excepto las indicadas expresamente como public.

Si se incluyen las dos palabras -public y private- es igual utilizar struct o class. En lo sucesivo se utilizará la palabra class, que se considera más segura y más propia de C++.

La solución que se utiliza habitualmente en C++ para resolver el problema de la
encapsulación u ocultamiento de datos (data hidding) es que las funciones miembro públicas sean el único camino para acceder a las variables miembro (y funciones miembro) privadas. De esta manera, el programador de la clase puede tomar las medidas necesarias para que otros usuarios de la clase no modifiquen datos o funciones sin estar autorizados para ello.

Las funciones miembro públicas son habitualmente el interface entre los datos contenidos en los objetos de la clase y los usuarios de la clase. Estos usuarios no necesitan tener acceso a los detalles internos de dichos objetos; sólo necesitan saber cómo se utilizan las funciones miembro públicas. Esto facilita también el mantenimiento y la mejora del programa: la clase y sus funciones
miembro pueden ser sustituidas por una versión nueva, más eficiente. En tanto en cuanto la declaración de las funciones miembro públicas se mantenga igual, el cambio no tendrá ninguna repercusión en los demás programas y funciones que hacen uso de la clase.

En el ejemplo anterior se puede ver ya cómo las funciones miembro, que en este caso son todas públicas, forman el interface utilizada para asignar y leer los valores de las variables miembro de la clase que son privadas. De esta manera se hace cumplir el principio de encapsulación.