C++

Identificatori di accesso C++

Identificatori di accesso C++
In C++, una classe è un insieme di variabili e funzioni che sono state configurate per lavorare insieme. Quando alle variabili della classe vengono dati valori, 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 insieme di valori assegnati alle variabili dell'altro oggetto. Si dice che creare un oggetto da una classe sia creare un'istanza dell'oggetto. Anche se due oggetti diversi hanno gli stessi valori per le loro variabili, questi oggetti sono entità diverse, identificate con nomi diversi nel programma. Le variabili per un oggetto e la sua classe corrispondente sono chiamate membri dati. Le funzioni di un oggetto e della sua classe corrispondente sono chiamate funzioni membro. I membri dei dati e le funzioni membro sono chiamati membri.

La parola accesso significa leggere o modificare il valore di una variabile e significa anche utilizzare una funzione. Gli identificatori di accesso C++ sono le parole "privato", "protetto" e "pubblico.” Decidono se un membro può accedere ad altri membri della sua classe, o se una funzione o un operatore esterno alla 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 genitore.

È necessaria una conoscenza di base del C++ per comprendere questo articolo e per testare il codice fornito.

Contenuto dell'articolo

Gli Specificatori Pubblici e Privati

Classe
Qualsiasi membro di una classe può accedere a qualsiasi altro membro di quella stessa classe, indipendentemente dal quale è etichettato come "pubblico" o "privato".” Si consideri il seguente programma:

#includere
usando lo spazio dei nomi std;
classe TheCla

privato:
int numero1;
int numero2;
pubblico:
TheCla(int n1, int n2)

numero1 = n1; numero2 = n2;

metodo int()

restituisce num1;

;
intero principale()

TheCla obj(10, 20);
int no2 = obj.metodo();
cout<//int no1 = obj.numero1;
restituisce 0;

L'uscita è 10. I membri privati ​​sono num1 e num2. I membri pubblici sono TheCla() e  method(). Nota che TheCla() è la funzione di costruzione che inizializza le variabili di interesse. La regione di uno 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 main(), la prima istruzione è l'istanza che coinvolge la funzione costruttore, che inizializza num1 e num2. L'istruzione successiva chiama il membro pubblico, method(), della classe.

Ora, nella descrizione della classe (definizione), la funzione membro pubblico, TheCla(), accede ai membri privati, num1 e num2. Inoltre, la funzione membro pubblico, method(), accede al membro privato, num1. Qualsiasi membro all'interno di una descrizione di classe può accedere a qualsiasi altro membro all'interno della stessa descrizione di classe; non importa quale membro è 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 main(), 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 main(), la funzione TheCla() è obj(10, 20).

Una funzione o un operatore esterno, come la funzione main(), non può accedere a nessuno dei membri privati ​​della classe, come num1 o num2. Rimuovi l'indicatore di commento, //, dalla penultima istruzione in main(). Se tenti di compilare il programma, nota che il programma non verrà compilato, dando un messaggio di errore.

Identificatore predefinito
L'identificatore predefinito per una classe è "privato.” Quindi, la descrizione della classe sopra è la stessa della seguente descrizione, privata, ma senza l'identificatore:

classe TheCla

int numero1;
int numero2;
pubblico:
TheCla(int n1, int n2)

numero1 = n1; numero2 = n2;

metodo int()

restituisce num1;

;

Nota: l'etichetta dell'identificatore di accesso inizia con l'identificatore ed è quindi seguito da due punti.

Lo specificatore protetto

All'interno di una descrizione di classe e da una funzione esterna o da un operatore esterno, lo specificatore protetto è lo stesso dello specificatore privato. Ora, sostituisci l'identificatore privato nel programma sopra con l'identificatore, proteggi e rimuovi l'indicatore di commento, //, dalla penultima istruzione nella funzione main(). Se tenti di compilare il programma, nota che il programma non verrà compilato, dando un messaggio di errore.

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

Classe derivata pubblica con i membri pubblici
Considera il seguente programma:

#includere
usando lo spazio dei nomi std;
classe TheCla

pubblico:
int numero1 = 10;
protetto:
int numero2 = 20;
privato:
int num3 = 30;
;
classe ChildCla : pubblico TheCla

pubblico:
int metodo1()

restituisce num1;

int metodo2()

restituire num2;

/*int metodo3()

restituire num3;
*/
;
intero principale()

ChildCla childObj;
int no1 = childObj.metodo1();
cout<int no2 = childObj.metodo2();
cout<restituisce 0;

L'uscita è:
10
20

Nella classe base, num1 è pubblico, num2 è protetto e num3 è privato. Nella classe derivata, tutte le funzioni membro sono pubbliche. La prima funzione, method1(), accede al membro dei dati pubblici, num1. La seconda funzione, method2(), accede al membro dati protetto, num2. La terza funzione, method3(), sebbene attualmente commentata, dovrebbe accedere al membro dei dati privati, num3.

Una classe derivata non viene dichiarata senza un identificatore di accesso (pubblico, protetto o privato). Sopra, la classe derivata è dichiarata con l'identificatore pubblico, ovvero:

class ChildCla : public TheCla

Ora decommenta la definizione della terza funzione membro nella classe derivata. Se tenti di compilare il programma, nota che non verrà compilato, 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 ai membri pubblici e protetti della classe base. Il programma sopra illustra questo illustrate.

Tuttavia, tieni presente che un membro pubblico della classe derivata pubblica può accedere a un membro protetto della classe base.

Identificatori di classe derivati ​​e Identificatori di membri

Classe derivata protetta con membri pubblici
Sostituire l'identificatore "pubblico" con "protetto" nella dichiarazione della classe derivata sopra, come segue:

class ChildCla : protetto TheCla

Compila ed esegui il programma e nota 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 ai membri pubblici e protetti della classe base. Questo è lo stesso di quando la classe derivata viene dichiarata public.

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

Classe derivata privata con membri pubblici
Sostituisci l'identificatore "protetto" con "privato" nella dichiarazione della classe derivata sopra, come segue:

class ChildCla : privato TheCla

Compila ed esegui il programma e nota 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 ai membri pubblici e protetti della classe base. Questo è lo stesso di quando la classe derivata viene dichiarata protetta o pubblica.

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

#includere
usando lo spazio dei nomi std;
classe TheCla

pubblico:
int numero1 = 10;
protetto:
int numero2 = 20;
privato:
int num3 = 30;
;
classe ChildCla : pubblico TheCla

protetto:
int metodo1()

restituisce num1;

int metodo2()

restituire num2;

/*int metodo3()

restituire num3;
*/
;
intero principale()

/*ChildCla childObj;
int no1 = childObj.metodo1();
cout</*int no2 = childObj.metodo2();
cout<restituisce 0;

Il programma funziona così com'è. Non c'è output, e non dovrebbe esserci alcun output, in base a come è stato digitato il programma.

Ora, decommenta la definizione della funzione, method3(), nella classe derivata. Se tenti di compilare il programma, nota che non verrà compilato, dando un messaggio di errore. Ciò significa che non è possibile accedere a un membro privato da una funzione esterna, un operatore esterno o una classe derivata. Questa è la stessa conclusione come è stato concluso sopra, riguardo all'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 decommenta il primo segmento di codice nella funzione main(). Se provi a compilare il programma, nota che il programma non verrà compilato a causa del primo segmento di codice nella funzione main(). Questo effetto non è nuovo. A parte la classe derivata, le funzioni esterne e gli operatori esterni, i membri protetti e privati ​​di una classe (di base o derivata) hanno lo stesso identificatore, privato. La funzione main() vede il membro protetto di qualsiasi classe, base o derivata, a partire dallo stesso specificatore, private, ed è vietato accedervi.

Se il secondo segmento di codice della funzione main() non è commentato, verrà applicata la stessa spiegazione. Cioè, la funzione main() non sarà in grado di accedere a un membro protetto o privato della classe derivata o della classe base. Questo è 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 l'identificatore "pubblico" con "protetto" nella dichiarazione della classe derivata sopra, come segue:

class ChildCla : protetto TheCla

Rimetti il ​​commento dei segmenti di codice nella funzione main(), se non è già stato fatto. Compila ed esegui il programma e nota che il risultato è come prima.

Classe derivata privata con membri protetti
Sostituisci l'identificatore "protetto" con "privato" nella dichiarazione della classe derivata sopra, come segue:

classe ChildCla : privato TheCla

Compila ed esegui il programma e nota che il risultato sarà come prima.

Classe derivata pubblica con membri privati ​​with
Sostituisci l'identificatore "privato" con "pubblico" nella dichiarazione della classe derivata sopra, come segue:

class ChildCla : public TheCla

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

Classe derivata protetta con membri privati
Sostituire l'identificatore "pubblico" con "protetto" nella dichiarazione della classe derivata sopra, come segue:

class ChildCla : protetto TheCla

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

Classe derivata privata con membri privati
Sostituisci l'identificatore "protetto" con "privato" nella dichiarazione della classe derivata sopra, come segue:

class ChildCla : privato TheCla

Compila ed esegui il programma. Questo risultato non è diverso dal caso "Classe derivata privata con membri protetti".

Conclusione

Gli identificatori di accesso C++ sono le parole "privato", "protetto" e "pubblico."Decidono l'accesso per i membri di una classe. La regione di uno 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 della stessa classe. Non è possibile accedere a un membro privato di una classe da alcuna funzione esterna, operatore esterno o classe derivata.

Il membro della classe base deve essere protetto in modo che un membro privato della classe base possa accedere a 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 uno specificatore di accesso in una classe, si assume lo specificatore privato. Cioè, l'identificatore di accesso predefinito è privato.

Riferimenti utilizzati in questo lavoro

  • Alireza Ebrahimi, EREDITÀ: RIUTILIZZABILITÀ ED ESTENDIBILITÀ
  • S. Malik, Strutture di dati che utilizzano C++ 2a edizione
Strumenti utili per i giocatori Linux
Se ti piace giocare su Linux, è probabile che tu abbia utilizzato app e utilità come Wine, Lutris e OBS Studio per migliorare l'esperienza di gioco. O...
Giochi rimasterizzati in HD per Linux che non hanno mai avuto una versione Linux prima
Molti sviluppatori ed editori di giochi stanno realizzando remaster HD di vecchi giochi per prolungare la vita del franchise, per favore i fan richied...
Come utilizzare AutoKey per automatizzare i giochi Linux
AutoKey è un'utilità di automazione desktop per Linux e X11, programmata in Python 3, GTK e Qt. Utilizzando la sua funzionalità di scripting e MACRO, ...