Derechos de acceso

Si es necesario, en la descripción de la estructura puede utilizar palabras clave especiales que representan modificadores de acceso que limitan la visibilidad de los campos desde fuera de la estructura. Hay tres modificadores: public, protected y private. Por defecto, todos los miembros de la estructura son públicos, lo que es equivalente a la siguiente entrada (utilizando la estructura Result como ejemplo):

struct Result
{
public:
   double probability;
   double coef[3];
   int direction;
   string status;
   ...
};

Todos los miembros por debajo del modificador reciben los derechos de acceso correspondientes hasta que se encuentra otro modificador o finaliza el bloque de estructura. Puede haber muchas secciones con diferentes derechos de acceso; no obstante, pueden modificarse de forma arbitraria.

Los miembros marcados como protected sólo están disponibles desde el código de esta estructura y estructuras descendientes; es decir, se supone que deben tener métodos públicos, de lo contrario, nadie podrá acceder a dichos campos.

Los miembros marcados como private sólo son accesibles desde dentro del código de la estructura. Por ejemplo, si añade private antes del campo status, lo más probable es que necesite un método para leer el estado por código externo (getStatus).

struct Result
{
public:
   double probability;
   double coef[3];
   int direction;
   
private:
   string status;
   
public:
   string getStatus()
   {
      return status;
   }
   ...
};

Sólo será posible establecer el estado a través del parámetro del segundo constructor. Si se accede directamente al campo se producirá el error «sin acceso al miembro privado 'status' de la estructura 'Result'»:

// error:
// cannot access to private member 'status' declared in structure 'Result'
r.status = "message";

En las clases, el acceso por defecto es private. Esto sigue el principio de encapsulación, que trataremos en el Capítulo sobre las clases.