Ordet adgang betyder at læse eller ændre værdien af en variabel, og det betyder også at bruge en funktion. C ++ adgangsspecifikatorer er ordene "privat", "beskyttet" og "offentligt.”De beslutter, om et medlem kan få adgang til andre medlemmer af sin klasse, eller om en funktion eller operatør uden for klassen og ikke tilhører klassen kan få adgang til ethvert medlem af klassen. De beslutter også, om et medlem af en afledt (underordnet) klasse kan få adgang til et medlem af en overordnet klasse.
Grundlæggende viden om C ++ kræves for at forstå denne artikel og for at teste den angivne kode.
Artikelindhold
- De offentlige og private specifikationer
- Den beskyttede specifikator
- Afledte klassespecifikatorer og medlemsspecifikatorer
- Konklusion
De offentlige og private specifikationer
Klasse
Ethvert medlem af en klasse kan få adgang til ethvert andet medlem af den samme klasse, uafhængigt af hvilket er mærket "offentlig" eller "privat.”Overvej følgende program:
ved hjælp af namespace std;
klasse TheCla
privat:
int num1;
int num2;
offentlig:
TheCla (int n1, int n2)
num1 = n1; num2 = n2;
int-metode ()
return num1;
;
int main ()
TheCla obj (10, 20);
int no2 = obj.metode();
cout<
returnere 0;
Outputtet er 10. De private medlemmer er num1 og num2. De offentlige medlemmer er TheCla () og metode (). Bemærk, at TheCla () er konstruktorfunktionen, der initialiserer variabler af interesse. Regionen for en adgangsspecifikator begynder fra sin etiket til slutningen af klassebeskrivelsen (definition) eller til starten af en anden adgangsspecifikator.
I hovedfunktionen () er den første sætning den instantiering, der involverer konstruktorfunktionen, som initialiserer num1 og num2. Den næste erklæring kalder klassens offentlige medlem, metode ().
Nu, i klassebeskrivelsen (definition), får den offentlige medlemsfunktion, TheCla () adgang til de private medlemmer, num1 og num2. Også den offentlige medlemsfunktion, metode (), får adgang til det private medlem, num1. Ethvert medlem inden for en klassebeskrivelse kan få adgang til ethvert andet medlem inden for den samme klassebeskrivelse; det betyder ikke noget, hvilket medlem der er privat eller offentligt.
En funktion eller operatør, der ikke er deklareret i klassebeskrivelsen og uden for klassebeskrivelsen, kan dog kun få adgang til offentlige medlemmer af klassen. Hovedfunktionen () er for eksempel en funktion, der er erklæret uden for klassebeskrivelsen. Det har kun haft adgang til metoden () og TheCla () offentlige medlemmer. Inde i hovedfunktionen () er funktionen TheCla () obj (10, 20).
En ekstern funktion eller en ekstern operatør, såsom hovedfunktionen (), har ikke adgang til nogen af de private medlemmer af klassen, såsom num1 eller num2. Fjern kommentarindikatoren // fra den sidste-men-en-sætning i main (). Hvis du forsøger at kompilere programmet, skal du bemærke, at programmet ikke kompileres, hvilket giver en fejlmeddelelse.
Standardspecifikator
Standardspecifikatoren for en klasse er “privat.”Så ovenstående klassebeskrivelse er den samme som den følgende beskrivelse, privat, men uden specifikationen:
int num1;
int num2;
offentlig:
TheCla (int n1, int n2)
num1 = n1; num2 = n2;
int-metode ()
return num1;
;
Bemærk: Adgangsspecifikatoretiketten begynder med angivelsen og efterfølges derefter af et kolon.
Den beskyttede specifikator
Inden for en klassebeskrivelse og fra en ekstern funktion eller en ekstern operatør er den beskyttede specifikator den samme som den private specifikator. Udskift nu den private specifikator i ovenstående program med specifikatoren, beskyt og fjern kommentarindikatoren // fra den sidste-men-en-sætning i hovedfunktionen (). Hvis du forsøger at kompilere programmet, skal du bemærke, at programmet ikke kompileres, hvilket giver en fejlmeddelelse.
Spørgsmålet om den beskyttede specifikator kommer op, når medlemmer af den afledte (arvede) klasse skal have adgang til medlemmer af basisklassen (overordnet).
Offentlig afledt klasse med offentlige medlemmer
Overvej følgende program:
ved hjælp af namespace std;
klasse TheCla
offentlig:
int num1 = 10;
beskyttet:
int num2 = 20;
privat:
int num3 = 30;
;
klasse ChildCla: offentlig TheCla
offentlig:
int metode1 ()
return num1;
int metode2 ()
returnere num2;
/ * int metode3 ()
returnere num3;
* /
;
int main ()
ChildCla childObj;
int no1 = barnObj.metode1 ();
cout<
cout<
Outputtet er:
10
20
I basisklassen er num1 offentlig, num2 er beskyttet, og num3 er privat. I den afledte klasse er alle medlemsfunktioner offentlige. Den første funktion, metode1 (), får adgang til det offentlige datamedlem, num1. Den anden funktion, metode2 (), får adgang til det beskyttede data-medlem, num2. Den tredje funktion, metode3 (), skal, selvom den i øjeblikket kommenteres, have adgang til det private datamedlem, num3.
En afledt klasse erklæres ikke uden en adgangsspecifikator (offentlig, beskyttet eller privat). Ovenfor erklæres den afledte klasse med den offentlige specifikator, det vil sige:
klasse ChildCla: offentlig TheClaFjern nu kommentar til definitionen af det tredje medlemsfunktion i den afledte klasse. Hvis du forsøger at kompilere programmet, skal du bemærke, at det ikke kompileres, hvilket giver en fejlmeddelelse.
Bemærk: Når hele den afledte klasse erklæres offentlig, kan dens medlemmer ikke få adgang til de private medlemmer af baseklassen. Dets medlemmer kan dog få adgang til de offentlige og beskyttede medlemmer af basisklassen. Ovenstående program illustrerer dette.
Bemærk dog, at et offentligt medlem af den offentlige afledte klasse kan få adgang til et beskyttet medlem af basisklassen.
Afledte klassespecifikatorer og medlemsspecifikatorer
Beskyttet afledt klasse med offentlige medlemmer
Udskift "offentlig" -specifikatoren med "beskyttet" i erklæringen for den afledte klasse ovenfor som følger:
Kompilér og kør programmet, og bemærk, at resultatet er det samme som før.
Så når hele den afledte klasse erklæres beskyttet, kan dens medlemmer ikke få adgang til de private medlemmer af baseklassen. Dets medlemmer kan dog få adgang til de offentlige og beskyttede medlemmer af basisklassen. Dette er det samme som når den afledte klasse erklæres offentlig.
Bemærk: et beskyttet medlem af den offentlige afledte klasse kan få adgang til et beskyttet medlem af basisklassen.
Privat afledt klasse med offentlige medlemmer
Udskift den "beskyttede" specifikator med "privat" i erklæringen for den afledte klasse ovenfor som følger:
Kompilér og kør programmet, og bemærk, at resultatet er det samme som før.
Så når hele den afledte klasse erklæres privat, kan dens medlemmer ikke få adgang til de private medlemmer af baseklassen. Dets medlemmer kan dog få adgang til de offentlige og beskyttede medlemmer af basisklassen. Dette er det samme som når den afledte klasse erklæres beskyttet eller offentlig.
Offentlig afledt klasse med beskyttede medlemmer
Skriv, kompilér og kør følgende program, hvor hele den afledte klasse er beskyttet, og dens medlemmer også er beskyttet. Nogle kodesegmenter er som følger:
ved hjælp af namespace std;
klasse TheCla
offentlig:
int num1 = 10;
beskyttet:
int num2 = 20;
privat:
int num3 = 30;
;
klasse ChildCla: offentlig TheCla
beskyttet:
int metode1 ()
return num1;
int metode2 ()
returnere num2;
/ * int metode3 ()
returnere num3;
* /
;
int main ()
/ * ChildCla childObj;
int no1 = barnObj.metode1 ();
cout<
cout<
Programmet fungerer som det er. Der er ingen output, og der antages ikke at være nogen output, baseret på hvordan programmet er blevet skrevet.
Fjern nu kommentaren til funktionsdefinitionen, metode3 (), i den afledte klasse. Hvis du forsøger at kompilere programmet, skal du bemærke, at det ikke kompileres, hvilket giver en fejlmeddelelse. Dette betyder, at et privat medlem ikke kan tilgås fra en ekstern funktion, ekstern operatør eller afledt klasse. Dette er den samme konklusion som blev konkluderet ovenfor om adgang til et privat medlem.
Bemærk: et beskyttet medlem af den beskyttede afledte klasse kan få adgang til et beskyttet medlem af basisklassen.
Sæt nu kommentarerne tilbage i den afledte klasse, og fjern kommentaren til det første kodesegment i hovedfunktionen (). Hvis du forsøger at kompilere programmet, skal du være opmærksom på, at programmet ikke kompileres på grund af det første kodesegment i hovedfunktionen (). Denne effekt er ikke ny. Bortset fra den afledte klasse, eksterne funktioner og eksterne operatører, er de beskyttede og private medlemmer af en (base eller afledt) klasse af samme specifikator, private. Hovedfunktionen () ser det beskyttede medlem af enhver klasse, uanset om det er base eller afledt, fra samme specifikator, privat, og det er forbudt at få adgang til det.
Hvis det andet kodesegment i hovedfunktionen () ikke kommenteres, gælder den samme forklaring. Det vil sige, at hovedfunktionen () ikke vil have adgang til et beskyttet eller privat medlem af den afledte klasse eller af basisklassen. Dette er uafhængigt af, om et beskyttet medlem af den afledte klasse kunne få adgang til et beskyttet medlem af basisklassen.
Beskyttet afledt klasse med beskyttede medlemmer
Udskift den "offentlige" specifikator med "beskyttet" i erklæringen for den afledte klasse ovenfor som følger:
Sæt kommentaren fra kodesegmenterne tilbage til hovedfunktionen (), hvis dette ikke allerede er gjort. Kompilér og kør programmet, og bemærk, at resultatet er som før.
Privat afledt klasse med beskyttede medlemmer
Udskift den "beskyttede" specifikator med "privat" i erklæringen for den afledte klasse ovenfor som følger:
Kompilér og kør programmet, og bemærk, at resultatet bliver som før.
Offentlig afledt klasse med private medlemmer
Udskift den "private" specifikator med "offentlig" i erklæringen for den afledte klasse ovenfor som følger:
Gør medlemmerne af den afledte klasse private. Kompilér og kør programmet. Resultatet adskiller sig ikke fra sagen "Offentlig afledt klasse med beskyttede medlemmer".
Beskyttet afledt klasse med private medlemmer
Udskift den "offentlige" specifikator med "beskyttet" i erklæringen for den afledte klasse ovenfor som følger:
Kompilér og kør programmet. Dette resultat adskiller sig ikke fra sagen "Beskyttet afledt klasse med beskyttede medlemmer".
Privat afledt klasse med private medlemmer
Udskift den "beskyttede" specifikator med "privat" i erklæringen for den afledte klasse ovenfor som følger:
Kompilér og kør programmet. Dette resultat adskiller sig ikke fra sagen "Privat afledt klasse med beskyttede medlemmer".
Konklusion
C ++ adgangsspecifikatorer er ordene "privat", "beskyttet" og "offentligt.”De beslutter adgang for medlemmer af en klasse. Regionen for en adgangsspecifikator begynder fra sin etiket til slutningen af klassebeskrivelsen (definition) eller til starten af en anden adgangsspecifikator. Ethvert medlem af en klasse kan få adgang til ethvert andet medlem af den samme klasse. Et privat medlem af en klasse kan ikke tilgås af nogen ekstern funktion, nogen ekstern operatør eller en afledt klasse.
Baseklassens medlem skal beskyttes, så et privat medlem af basisklassen kan få adgang til et medlem af den afledte klasse. Dette beskyttede medlem af basisklassen ses som et privat medlem af basisklassen af en ekstern funktion eller en ekstern operatør.
Et offentligt medlem af en klasse kan tilgås af enhver ekstern funktion, enhver ekstern operatør eller en afledt klasse.
I mangel af noget adgangsspecifikator i en klasse antages den private specifikator. Standardadgangsspecifikatoren er altså privat.
Referencer brugt i dette arbejde
- Alireza Ebrahimi, ARV: GENBRUG OG UDVIDELIGHED
- S. Malik, datastrukturer ved hjælp af C ++ 2. udgave