C ++

C ++ Tilgangsspesifikatorer

C ++ Tilgangsspesifikatorer
I C ++ er en klasse et sett med variabler og funksjoner som er konfigurert til å fungere sammen. Når variablene i klassen er gitt verdier, oppnås et objekt. Et objekt har de samme variablene og fungerer som en klasse, men denne gangen har variablene verdier. Mange objekter kan opprettes fra en klasse. Ett objekt skiller seg fra et annet objekt i henhold til det forskjellige settet med verdier som er tildelt variablene til det andre objektet. Å lage et objekt fra en klasse sies å instantere objektet. Selv om to forskjellige objekter har de samme verdiene for variablene sine, er disse objektene forskjellige enheter, identifisert av forskjellige navn i programmet. Variablene for et objekt og dets tilsvarende klasse kalles data-medlemmer. Funksjonene til et objekt og dets tilsvarende klasse kalles medlemsfunksjoner. Datamedlemmer og medlemsfunksjoner kalles medlemmer.

Ordet tilgang betyr å lese eller endre verdien til en variabel, og det betyr også å bruke en funksjon. C ++ tilgangsspesifikatorer er ordene “privat”, “beskyttet” og “offentlig.”De bestemmer om et medlem kan få tilgang til andre medlemmer i klassen, eller om en funksjon eller operatør utenfor klassen og ikke tilhører klassen, kan få tilgang til et hvilket som helst medlem av klassen. De bestemmer også om et medlem av en avledet (barn) klasse kan få tilgang til et medlem av en foreldreklasse.

Grunnleggende kunnskaper om C ++ kreves for å forstå denne artikkelen og for å teste koden.

Artikkelinnhold

Offentlige og private spesifikatorer

Klasse
Ethvert medlem av en klasse kan få tilgang til et hvilket som helst annet medlem av den samme klassen, uavhengig av hvilket som er merket "offentlig" eller "privat.Tenk på følgende program:

#inkludere
bruker navneområde std;
klasse TheCla

privat:
int num1;
int num2;
offentlig:
TheCla (int n1, int n2)

num1 = n1; num2 = n2;

int metode ()

retur num1;

;
int main ()

TheCla obj (10, 20);
int no2 = obj.metode();
cout<// int no1 = obj.num1;
retur 0;

Utgangen er 10. De private medlemmene er num1 og num2. De offentlige medlemmene er TheCla () og metode (). Merk at TheCla () er konstruktorfunksjonen som initialiserer variabler av interesse. Regionen til en tilgangsspesifikator begynner fra etiketten til slutten av klassebeskrivelsen (definisjon) eller til starten av en annen tilgangsspesifikator.

I hovedfunksjonen () er den første utsagnet instantiasjonen som involverer konstruktorfunksjonen, som initialiserer num1 og num2. Den neste uttalelsen kaller det offentlige medlemmet, metode (), i klassen.

Nå, i klassebeskrivelsen (definisjon), får den offentlige medlemsfunksjonen, TheCla () tilgang til de private medlemmene, num1 og num2. Også den offentlige medlemsfunksjonen, metode (), får tilgang til det private medlemmet, num1. Ethvert medlem i en klassebeskrivelse har tilgang til et hvilket som helst annet medlem i samme klassebeskrivelse; det spiller ingen rolle hvilket medlem som er privat eller offentlig.

Imidlertid kan en funksjon eller operatør som ikke er deklarert i klassebeskrivelsen og utenfor klassebeskrivelsen, kun få tilgang til offentlige medlemmer av klassen. Hovedfunksjonen () er for eksempel en funksjon som er erklært utenfor klassebeskrivelsen. Den har bare fått tilgang til metoden () og TheCla () offentlige medlemmer. Inne i hovedfunksjonen () er funksjonen TheCla () obj (10, 20).

En ekstern funksjon eller en ekstern operatør, for eksempel hovedfunksjonen (), får ikke tilgang til noen av de private medlemmene i klassen, for eksempel num1 eller num2. Fjern kommentarindikatoren, //, fra den siste-men-en-setningen i hoved (). Hvis du prøver å kompilere programmet, må du være oppmerksom på at programmet ikke kompileres, noe som gir en feilmelding.

Standard spesifikator
Standardspesifikatoren for en klasse er “privat.”Så, den ovennevnte klassebeskrivelsen er den samme som den følgende beskrivelsen, privat, men uten spesifikatoren:

klasse TheCla

int num1;
int num2;
offentlig:
TheCla (int n1, int n2)

num1 = n1; num2 = n2;

int metode ()

retur num1;

;

Merk: tilgangsspesifikasjonsetiketten begynner med spesifisereren, og blir deretter fulgt av et kolon.

Den beskyttede spesifikatoren

Innenfor en klassebeskrivelse, og fra en ekstern funksjon eller en ekstern operatør, er den beskyttede spesifikatoren den samme som den private spesifisereren. Bytt ut den private spesifikatoren i ovennevnte program med spesifisereren, beskytt og fjern kommentarindikatoren // fra den siste-men-en-setningen i hovedfunksjonen. Hvis du prøver å kompilere programmet, må du være oppmerksom på at programmet ikke kompileres, noe som gir en feilmelding.

Utgaven av den beskyttede spesifikatoren kommer opp når medlemmer av den avledede (arvede) klassen må få tilgang til medlemmene i baseklassen (foreldre).

Offentlig avledet klasse med offentlige medlemmer
Tenk på følgende program:

#inkludere
bruker navneområde std;
klasse TheCla

offentlig:
int num1 = 10;
beskyttet:
int num2 = 20;
privat:
int num3 = 30;
;
klasse ChildCla: offentlig TheCla

offentlig:
int metode1 ()

retur num1;

int metode2 ()

retur num2;

/ * int metode3 ()

retur num3;
* /
;
int main ()

ChildCla childObj;
int no1 = barnObj.metode1 ();
cout<int no2 = barnObj.metode2 ();
cout<retur 0;

Utgangen er:
10
20

I basisklassen er num1 offentlig, num2 er beskyttet og num3 er privat. I den avledede klassen er alle medlemsfunksjonene offentlige. Den første funksjonen, metode1 (), får tilgang til det offentlige datamedlemmet, num1. Den andre funksjonen, metode2 (), får tilgang til det beskyttede data-medlemmet, num2. Den tredje funksjonen, method3 (), selv om den for øyeblikket er kommentert, bør få tilgang til det private data-medlemmet, num3.

En avledet klasse blir ikke erklært uten tilgangsspesifikator (offentlig, beskyttet eller privat). Ovenfor blir den avledede klassen erklært med den offentlige spesifisereren, det vil si:

klasse ChildCla: offentlig TheCla

Un-comment den tredje medlemsfunksjonsdefinisjonen i den avledede klassen. Hvis du prøver å kompilere programmet, må du være oppmerksom på at det ikke kompileres, og gi en feilmelding.

Merk: Når hele den avledede klassen blir erklært offentlig, kan medlemmene ikke få tilgang til de private medlemmene av baseklassen. Dens medlemmer kan imidlertid få tilgang til de offentlige og beskyttede medlemmene av baseklassen. Ovennevnte program illustrerer dette.

Vær imidlertid oppmerksom på at et offentlig medlem av den offentlige avledede klassen kan få tilgang til et beskyttet medlem av basisklassen.

Avledede klassespesifikatorer og medlemsspesifikatorer

Beskyttet avledet klasse med offentlige medlemmer
Bytt ut "offentlig" spesifikator med "beskyttet" i erklæringen fra den avledede klassen ovenfor, som følger:

klasse ChildCla: beskyttet TheCla

Kompilere og kjør programmet og merk at resultatet er det samme som før.

Så når hele den avledede klassen blir erklært beskyttet, kan ikke medlemmene få tilgang til de private medlemmene av baseklassen. Dens medlemmer kan imidlertid få tilgang til de offentlige og beskyttede medlemmene av baseklassen. Dette er det samme som når den avledede klassen blir erklært offentlig.

Merk: et beskyttet medlem av den offentlige avledede klassen kan få tilgang til et beskyttet medlem av basisklassen.

Privat avledet klasse med offentlige medlemmer
Erstatt den "beskyttede" spesifikatoren med "privat" i erklæringen for den avledede klassen ovenfor, som følger:

klasse ChildCla: privat TheCla

Kompiler og kjør programmet og merk at resultatet er det samme som før.

Så når hele den avledede klassen blir erklært privat, kan medlemmene ikke få tilgang til de private medlemmene i basisklassen. Dens medlemmer kan imidlertid få tilgang til de offentlige og beskyttede medlemmene av baseklassen. Dette er det samme som når den avledede klassen blir erklært beskyttet eller offentlig.

Offentlig avledet klasse med beskyttede medlemmer
Skriv inn, kompiler og kjør følgende program der hele den avledede klassen er beskyttet, og dens medlemmer også er beskyttet. Noen kodesegmenter er som følger:

#inkludere
bruker navneområde std;
klasse TheCla

offentlig:
int num1 = 10;
beskyttet:
int num2 = 20;
privat:
int num3 = 30;
;
klasse ChildCla: offentlig TheCla

beskyttet:
int metode1 ()

retur num1;

int metode2 ()

retur num2;

/ * int-metode3 ()

retur num3;
* /
;
int main ()

/ * ChildCla childObj;
int no1 = barnObj.metode1 ();
cout</ * int no2 = childObj.metode2 ();
cout<retur 0;

Programmet fungerer som det er. Det er ingen utdata, og det skal ikke være noen utdata, basert på hvordan programmet er skrevet.

Fjern nå kommentaren til funksjonsdefinisjonen, metode 3 (), i den avledede klassen. Hvis du prøver å kompilere programmet, må du være oppmerksom på at det ikke kompileres, noe som gir en feilmelding. Dette betyr at et privat medlem ikke kan nås fra en ekstern funksjon, utenfor operatør eller avledet klasse. Dette er den samme konklusjonen som ble konkludert ovenfor om tilgang til et privat medlem.

Merk: et beskyttet medlem av den beskyttede avledede klassen kan få tilgang til et beskyttet medlem av basisklassen.

Sett kommentarene tilbake i den avledede klassen, og fjern kommentaren til det første kodesegmentet i hovedfunksjonen (). Hvis du prøver å kompilere programmet, må du være oppmerksom på at programmet ikke vil kompilere på grunn av det første kodesegmentet i hovedfunksjonen (). Denne effekten er ikke ny. Bortsett fra den avledede klassen, eksterne funksjoner og eksterne operatører, er de beskyttede og private medlemmene av en (base eller avledet) klasse av samme spesifiserende, private. Hovedfunksjonen () ser det beskyttede medlemmet i en hvilken som helst klasse, enten det er base eller avledet, fra samme spesifikator, privat, og har ikke adgang til det.

Hvis det andre kodesegmentet til hovedfunksjonen () ikke er kommentert, vil den samme forklaringen gjelde. Det vil si at hovedfunksjonen () ikke vil ha tilgang til et beskyttet eller privat medlem av den avledede klassen eller av basisklassen. Dette er uavhengig av om et beskyttet medlem av den avledede klassen kunne få tilgang til et beskyttet medlem av basisklassen.

Beskyttet avledet klasse med beskyttede medlemmer
Bytt ut "offentlig" spesifikator med "beskyttet" i erklæringen fra den avledede klassen ovenfor, som følger:

klasse ChildCla: beskyttet TheCla

Sett kommentaren til kodesegmentene tilbake til hovedfunksjonen (), hvis dette ikke allerede er gjort. Kompiler og kjør programmet og merk at resultatet blir som før.

Privat avledet klasse med beskyttede medlemmer
Erstatt den "beskyttede" spesifikatoren med "privat" i erklæringen til den avledede klassen ovenfor, som følger:

klasse ChildCla: privat TheCla

Kompilere og kjør programmet og merk at resultatet blir som før.

Offentlig avledet klasse med private medlemmer
Erstatt "privat" -spesifikatoren med "offentlig" i erklæringen fra den avledede klassen ovenfor, som følger:

klasse ChildCla: offentlig TheCla

Gjør medlemmene i den avledede klassen private. Kompilere og kjør programmet. Resultatet er ikke forskjellig fra saken "Public Derived Class with Protected Members".

Beskyttet avledet klasse med private medlemmer
Bytt ut "offentlig" spesifikator med "beskyttet" i erklæringen fra den avledede klassen ovenfor, som følger:

klasse ChildCla: beskyttet TheCla

Kompilere og kjør programmet. Dette resultatet er ikke forskjellig fra saken "Protected Derived Class with Protected Members".

Privat avledet klasse med private medlemmer
Erstatt den "beskyttede" spesifikatoren med "privat" i erklæringen fra den avledede klassen ovenfor, som følger:

klasse ChildCla: privat TheCla

Kompilere og kjør programmet. Dette resultatet er ikke forskjellig fra saken "Privat avledet klasse med beskyttede medlemmer".

Konklusjon

C ++ tilgangsspesifikatorer er ordene "privat", "beskyttet" og "offentlig.”De bestemmer tilgang for medlemmer av en klasse. Regionen til en tilgangsspesifikator begynner fra etiketten, til slutten av klassebeskrivelsen (definisjon) eller til starten av en annen tilgangsspesifikator. Ethvert medlem av en klasse kan få tilgang til et hvilket som helst annet medlem av samme klasse. Et privat medlem av en klasse kan ikke nås av noen utenforstående funksjon, noen utenforstående operatør eller en avledet klasse.

Medlemmet av baseklassen må beskyttes slik at et privat medlem av baseklassen kan fås av et medlem av den avledede klassen. Dette beskyttede medlemmet av baseklassen blir sett på som et privat medlem av baseklassen av en ekstern funksjon eller en ekstern operatør.

Et offentlig medlem av en klasse kan nås av en hvilken som helst ekstern funksjon, en hvilken som helst ekstern operatør eller en avledet klasse.

I mangel av tilgangsspesifikator i en klasse, antas den private spesifisereren. Det vil si at standard tilgangsspesifikator er privat.

Referanser brukt i dette arbeidet

  • Alireza Ebrahimi, ARV: Gjenbrukbarhet og utvidbarhet
  • S. Malik, datastrukturer ved bruk av C ++ 2. utgave
Beste spill å spille med håndsporing
Oculus Quest introduserte nylig den gode ideen om håndsporing uten kontrollere. Med et stadig økende antall spill og aktiviteter som utfører støtte en...
Hvordan vise OSD-overlegg i fullskjerm Linux-apper og spill
Å spille fullskjermspill eller bruke apper i distraksjonsfri fullskjermmodus kan avskrekke deg fra relevant systeminformasjon som er synlig i et panel...
Topp 5 spillfangstkort
Vi har alle sett og elsket streaming av spill på YouTube. PewDiePie, Jakesepticye og Markiplier er bare noen av de beste spillerne som har tjent milli...