C++ Specifier di accesso


Esempio

Ci sono tre parole chiave che fungono da specificatori di accesso . Questi limitano l'accesso ai membri della classe seguendo l'identificatore, fino a quando un altro specificatore cambia nuovamente il livello di accesso:

Parola chiave Descrizione
public Tutti hanno accesso
protected Solo la classe stessa, le classi derivate e gli amici hanno accesso
private Solo la classe stessa e gli amici hanno accesso

Quando il tipo viene definito utilizzando la parola chiave class , l'identificatore di accesso predefinito è private , ma se il tipo è definito utilizzando la parola chiave struct , lo specificatore di accesso predefinito è public :

struct MyStruct { int x; };
class MyClass { int x; };

MyStruct s;
s.x = 9; // well formed, because x is public

MyClass c;
c.x = 9; // ill-formed, because x is private

Gli specificatori di accesso sono principalmente utilizzati per limitare l'accesso ai campi e ai metodi interni e impongono al programmatore di utilizzare un'interfaccia specifica, ad esempio per forzare l'uso di getter e setter invece di fare riferimento direttamente a una variabile:

class MyClass {

public: /* Methods: */

    int x() const noexcept { return m_x; }
    void setX(int const x) noexcept { m_x = x; }

private: /* Fields: */

    int m_x;

};

L'utilizzo protected è utile per consentire a determinate funzionalità del tipo di essere accessibili solo alle classi derivate, ad esempio, nel seguente codice, il metodo calculateValue() è accessibile solo alle classi derivanti dalla classe base Plus2Base , come ad esempio FortyTwo :

struct Plus2Base {
    int value() noexcept { return calculateValue() + 2; }
protected: /* Methods: */
    virtual int calculateValue() noexcept = 0;
};
struct FortyTwo: Plus2Base {
protected: /* Methods: */
    int calculateValue() noexcept final override { return 40; }
};

Si noti che la parola chiave friend può essere utilizzata per aggiungere eccezioni di accesso a funzioni o tipi per l'accesso a membri protetti e privati.

Le parole chiave public , protected e private possono anche essere utilizzate per concedere o limitare l'accesso ai sottooggetti di classe base. Vedi l'esempio dell'Eredità .