C ++

C ++ Adgangsspecifikatorer

C ++ Adgangsspecifikatorer
I C ++ er en klasse et sæt variabler og funktioner, der er konfigureret til at arbejde sammen. Når variablerne i klassen får værdier, opnås et objekt. Et objekt har de samme variabler og fungerer som en klasse, men denne gang har variablerne værdier. Mange objekter kan oprettes fra en klasse. Et objekt adskiller sig fra et andet objekt i henhold til det forskellige sæt værdier, der er tildelt variablerne for det andet objekt. Oprettelse af et objekt fra en klasse siges at instantere objektet. Selvom to forskellige objekter har de samme værdier for deres variabler, er disse objekter forskellige enheder identificeret ved forskellige navne i programmet. Variablerne for et objekt og dets tilsvarende klasse kaldes data-medlemmer. Funktionerne for et objekt og dets tilsvarende klasse kaldes medlemsfunktioner. Datamedlemmer og medlemsfunktioner kaldes medlemmer.

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

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:

#omfatte
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<// int no1 = obj.num1;
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:

klasse TheCla

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:

#omfatte
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<int no2 = childObj.metode2 ();
cout<returnere 0;

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 TheCla

Fjern 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:

klasse ChildCla: beskyttet TheCla

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:

klasse ChildCla: privat TheCla

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:

#omfatte
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</ * int no2 = childObj.metode2 ();
cout<returnere 0;

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:

klasse ChildCla: beskyttet TheCla

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:

klasse ChildCla: privat TheCla

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:

klasse ChildCla: offentlig TheCla

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:

klasse ChildCla: beskyttet TheCla

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:

klasse ChildCla: privat TheCla

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
SuperTuxKart til Linux
SuperTuxKart er en fantastisk titel designet til at give dig Mario Kart-oplevelsen gratis på dit Linux-system. Det er ret udfordrende og sjovt at spil...
Kæmp om Wesnoth-vejledning
Slaget om Wesnoth er et af de mest populære open source-strategispil, som du kan spille på dette tidspunkt. Ikke kun har dette spil været under udvikl...
0 A.D. Vejledning
Ud af de mange strategispil derude, 0 A.D. formår at skille sig ud som en omfattende titel og et meget dybt, taktisk spil på trods af at det er open s...