Specificatori di accesso C ++

Specificatori di accesso C ++
In C ++, una classe è un insieme di variabili e funzioni che sono state configurate per lavorare insieme. Quando le variabili della classe vengono dati, si ottiene un oggetto. Un oggetto ha le stesse variabili e funzioni di una classe, ma questa volta le variabili hanno valori. Molti oggetti possono essere creati da una classe. Un oggetto differisce da un altro oggetto in base al diverso set di valori assegnati alle variabili dell'altro oggetto. Si dice che la creazione di un oggetto da una classe stia istanziando l'oggetto. Anche se due oggetti diversi hanno gli stessi valori per le loro variabili, questi oggetti sono entità diverse, identificate da nomi diversi nel programma. Le variabili per un oggetto e la sua classe corrispondente sono chiamate membri dei dati. Le funzioni di un oggetto e la sua classe corrispondente sono chiamate funzioni del membro. I membri dei dati e le funzioni dei membri sono chiamati membri.

L'accesso alla parola significa leggere o modificare il valore di una variabile e significa anche utilizzare una funzione. Gli specificatori di accesso C ++ sono le parole, "private", "protette" e "pubblico."Decidono se un membro può accedere ad altri membri della sua classe o se una funzione o un operatore al di fuori della classe e non appartenente alla classe può accedere a qualsiasi membro della classe. Decidono anche se un membro di una classe derivata (figlio) può accedere a un membro di una classe madre.

La conoscenza di base di C ++ è necessaria per comprendere questo articolo e testare il codice fornito.

Contenuto dell'articolo

  • Gli specificatori pubblici e privati
  • Lo specificatore protetto
  • Specificatori e specificatori di classe derivati
  • Conclusione

Gli specificatori pubblici e privati

Classe
Qualsiasi membro di una classe può accedere a qualsiasi altro membro della stessa classe, indipendentemente dei quali è etichettato "pubblico" o "privato."Considera il seguente programma:

#includere
Utilizzo dello spazio dei nomi std;
Classe thecla

privato:
int num1;
int Num2;
pubblico:
Thecla (int n1, int n2)

num1 = n1; num2 = n2;

Method ()

restituire num1;

;
int main ()

TheCla Obj (10, 20);
int no2 = obj.metodo();
cout<// int no1 = obj.num1;
restituzione 0;

L'output è 10. I membri privati ​​sono num1 e num2. I membri pubblici sono thecla () e metodo (). Si noti che thecla () è la funzione del costruttore che inizializza le variabili di interesse. La regione di un specificatore di accesso inizia dalla sua etichetta alla fine della descrizione della classe (definizione) o all'inizio di un altro specificatore di accesso.

Nella funzione principale (), la prima affermazione è l'istanziazione che coinvolge la funzione del costruttore, che inizializza NUM1 e NUM2. La prossima dichiarazione chiama il membro pubblico, Method (), della classe.

Ora, nella descrizione della classe (definizione), la funzione dei membri pubblici, thecla (), accede ai membri privati, NUM1 e NUM2. Inoltre, la funzione dei membri pubblici, Method (), accede al membro privato, Num1. Qualsiasi membro all'interno di una descrizione della classe può accedere a qualsiasi altro membro all'interno della stessa descrizione della classe; Non importa quale membro sia privato o pubblico.

Tuttavia, una funzione o un operatore non dichiarato nella descrizione della classe e al di fuori della descrizione della classe può accedere solo ai membri pubblici della classe. La funzione principale (), ad esempio, è una funzione dichiarata al di fuori della descrizione della classe. È stato in grado di accedere solo al metodo () e ai membri pubblici di TheCla (). All'interno della funzione principale (), la funzione thecla () è OBJ (10, 20).

Una funzione esterna o un operatore esterno, come la funzione principale (), non può accedere a nessuno dei membri privati ​​della classe, come NUM1 o NUM2. Rimuovi l'indicatore di commento, //, dall'ultima dichiarazione in main (). Se si tenta di compilare il programma, si noti che il programma non si compilerà, fornendo un messaggio di errore.

Specificatore predefinito
L'impecificatore predefinito per una classe è "privato."Quindi, la descrizione della classe sopra è uguale alla seguente descrizione, privata, ma senza il specificatore:

Classe thecla

int num1;
int Num2;
pubblico:
Thecla (int n1, int n2)

num1 = n1; num2 = n2;

Method ()

restituire num1;

;

Nota: L'etichetta Specifier Access inizia con lo specificatore e viene quindi seguita da un colon.

Lo specificatore protetto

All'interno di una descrizione della classe e da una funzione esterna o da operatore esterno, l'identificatore protetto è uguale allo Specificatore privato. Ora, sostituire lo specificatore privato nel programma sopra con lo specificatore, proteggere e rimuovere l'indicatore di commento, //, dall'ultima dichiarazione nella funzione principale (). Se si tenta di compilare il programma, si noti che il programma non si compilerà, fornendo un messaggio di errore.

Il problema dello specificatore protetto emerge quando i membri della classe derivata (ereditati) devono accedere ai membri della classe base (genitore).

Classe di derivazione pubblica con membri pubblici
Considera il seguente programma:

#includere
Utilizzo dello spazio dei nomi std;
Classe thecla

pubblico:
int num1 = 10;
protetto:
int num2 = 20;
privato:
int Num3 = 30;
;
Classe Childcla: pubblica Thecla

pubblico:
int Method1 ()

restituire num1;

int Method2 ()

restituire num2;

/*int Method3 ()

restituire num3;
*/
;
int main ()

Childcla Childobj;
int no1 = chilsobj.Method1 ();
cout<int no2 = chilsobj.Method2 ();
cout<restituzione 0;

L'output è:

10
20

Nella classe di base, Num1 è pubblico, Num2 è protetto e Num3 è privato. Nella classe derivata, tutte le funzioni dei membri sono pubbliche. La prima funzione, Method1 (), accede al membro dei dati pubblici, Num1. La seconda funzione, Method2 (), accede all'elemento dati protetto, Num2. La terza funzione, Method3 (), sebbene attualmente commentata, dovrebbe accedere al membro dei dati privati, NUM3.

Una classe derivata non è dichiarata senza un specificatore di accesso (pubblico, protetto o privato). Sopra, la classe derivata è dichiarata con lo specificatore pubblico, cioè:

Class Childcla: pubblico thecla

Ora non commement la definizione della funzione del terzo membro nella classe derivata. Se si tenta di compilare il programma, si noti che non si compilerà, dando un messaggio di errore.

Nota: Quando l'intera classe derivata viene dichiarata pubblica, i suoi membri non possono accedere ai membri privati ​​della classe base. I suoi membri possono, tuttavia, accedere al pubblico e ai membri protetti della classe base. Il programma di cui sopra illustra questo.

Tuttavia, si noti che un membro pubblico della classe di derivazione pubblica può accedere a un membro protetto della classe base.

Specificatori e specificatori di classe derivati

Classe derivata protetta con membri pubblici
Sostituire lo specificatore "pubblico" con "protetto" nella dichiarazione della classe derivata sopra, come segue:

Class Childcla: protetto Thecla

Compilare ed eseguire il programma e notare che il risultato è lo stesso di prima.

Quindi, quando l'intera classe derivata viene dichiarata protetta, i suoi membri non possono accedere ai membri privati ​​della classe base. I suoi membri possono, tuttavia, accedere al pubblico e ai membri protetti della classe base. Questo è lo stesso di quando la classe derivata viene dichiarata pubblica.

Nota: Un membro protetto della classe derivata pubblica può accedere a un membro protetto della classe base.

Classe derivata privata con membri pubblici
Sostituire lo specificatore "protetto" con "privato" nella dichiarazione della classe derivata sopra, come segue:

Class Childcla: privato thecla

Compilare ed eseguire il programma e notare che il risultato è lo stesso di prima.

Quindi, quando l'intera classe derivata viene dichiarata privata, i suoi membri non possono accedere ai membri privati ​​della classe base. I suoi membri possono, tuttavia, accedere al pubblico e ai membri protetti della classe base. Questo è lo stesso di quando la classe derivata viene dichiarata protetta o pubblica.

Classe di derivazione pubblica con membri protetti
Tipo, compilare ed eseguire il seguente programma, in cui è protetta l'intera classe derivata e i suoi membri sono anche protetti. Alcuni segmenti di codice sono i seguenti:

#includere
Utilizzo dello spazio dei nomi std;
Classe thecla

pubblico:
int num1 = 10;
protetto:
int num2 = 20;
privato:
int Num3 = 30;
;
Classe Childcla: pubblica Thecla

protetto:
int Method1 ()

restituire num1;

int Method2 ()

restituire num2;

/*int Method3 ()

restituire num3;
*/
;
int main ()

/*Childcla Childobj;
int no1 = chilsobj.Method1 ();
cout</*int no2 = chilsobj.Method2 ();
cout<restituzione 0;

Il programma funziona così com'è. Non esiste un output e non dovrebbe essere output, in base a come è stato digitato il programma.

Ora, non comme di definizione della funzione, Method3 (), nella classe derivata. Se si tenta di compilare il programma, si noti che non si compilerà, dando un messaggio di errore. Ciò significa che non è possibile accedere a un membro privato da una funzione esterna, operatore esterno o classe derivata. Questa è la stessa conclusione che si è conclusa sopra, per quanto riguarda l'accesso a un membro privato.

Nota: Un membro protetto della classe derivata protetta può accedere a un membro protetto della classe base.

Ora, rimetti i commenti nella classe derivata e non comment il primo segmento di codice nella funzione principale (). Se si tenta di compilare il programma, si noti che il programma non si compilerà a causa del primo segmento di codice nella funzione principale (). Questo effetto non è nuovo. Oltre alla classe derivata, alle funzioni esterne e agli operatori esterni, i membri protetti e privati ​​di una classe (base o derivata) sono dello stesso specificatore, privato. La funzione principale () vede il membro protetto di qualsiasi classe, sia di base che derivata, come dello stesso specificatore, privato, ed è vietato accedervi.

Se il secondo segmento di codice della funzione principale () non è commentato, si applicherà la stessa spiegazione. Cioè, la funzione principale () non sarà in grado di accedere a un membro protetto o privato della classe derivata o della classe base. Ciò è indipendente dal fatto che un membro protetto della classe derivata possa accedere a un membro protetto della classe base.

Classe derivata protetta con membri protetti
Sostituire lo specificatore "pubblico" con "protetto" nella dichiarazione della classe derivata sopra, come segue:

Class Childcla: protetto Thecla

Rimettere il commento dei segmenti di codice nella funzione principale (), se questo non è già stato fatto. Compilare ed eseguire il programma e notare che il risultato è come prima.

Classe derivata privata con membri protetti
Sostituire lo specificatore "protetto" con "privato" nella dichiarazione della classe derivata sopra, come segue:

Class Childcla: Private thecla

Compilare ed eseguire il programma e notare che il risultato sarà come prima.

Classe di derivazione pubblica con membri privati
Sostituisci lo specificatore "privato" con "pubblico" nella dichiarazione della classe derivata sopra, come segue:

Class Childcla: pubblico thecla

Rendi privati ​​i membri della classe derivata. Compilare ed eseguire il programma. Il risultato non è diverso dal caso "classe pubblica con membri protetti".

Classe derivata protetta con membri privati
Sostituire lo specificatore "pubblico" con "protetto" nella dichiarazione della classe derivata sopra, come segue:

Class Childcla: protetto Thecla

Compilare ed eseguire il programma. Questo risultato non è diverso dal caso "Classe derivata protetta con membri protetti".

Classe di derivazione privata con membri privati
Sostituire lo specificatore "protetto" con "privato" nella dichiarazione della classe derivata sopra, come segue:

Class Childcla: privato thecla

Compilare ed eseguire il programma. Questo risultato non è diverso dal caso "Classe Private con membri protetti".

Conclusione

Gli specificatori di accesso C ++ sono le parole "private", "protette" e "pubblico."Decidono l'accesso per i membri di una classe. La regione di un specificatore di accesso inizia dalla sua etichetta, alla fine della descrizione della classe (definizione) o all'inizio di un altro specificatore di accesso. Qualsiasi membro di una classe può accedere a qualsiasi altro membro di quella stessa classe. Non è possibile accedere a un membro privato di una classe da nessuna funzione esterna, qualsiasi operatore esterno o classe derivata.

Il membro della classe base deve essere reso protetto in modo che un membro privato della classe base possa essere accessibile da un membro della classe derivata. Questo membro protetto della classe base è visto come un membro privato della classe base da una funzione esterna o da un operatore esterno. È possibile accedere a un membro pubblico di una classe da qualsiasi funzione esterna, qualsiasi operatore esterno o una classe derivata. In assenza di qualsiasi specificatore di accesso in una classe, si assume lo specificatore privato. Cioè, lo specificatore di accesso predefinito è privato.