C ++ tilgangspesifikasjoner

C ++ tilgangspesifikasjoner
I C ++ er en klasse et sett med variabler og funksjoner som er konfigurert til å fungere sammen. Når variablene i klassen får verdier, oppnås et objekt. Et objekt har de samme variablene og funksjonene som en klasse, men denne gangen har variablene verdier. Mange gjenstander kan opprettes fra en klasse. Det ene objektet skiller seg fra et annet objekt i henhold til det forskjellige settet med verdier som er tilordnet variablene til det andre objektet. Å lage et objekt fra en klasse sies å instantisere objektet. Selv om to forskjellige objekter har de samme verdiene for variablene sine, er disse objektene forskjellige enheter, identifisert med forskjellige navn i programmet. Variablene for et objekt og dens tilsvarende klasse kalles datamedlemmer. Funksjonene til et objekt og dens tilsvarende klasse kalles medlemsfunksjoner. Datamedlemmer og medlemsfunksjoner kalles medlemmer.

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

Grunnleggende kunnskap om C ++ er påkrevd for å forstå denne artikkelen og for å teste koden som er gitt.

Artikkelinnhold

  • De offentlige og private spesifikasjonene
  • Den beskyttede spesifikasjonen
  • Avledede klassespesifikasjoner og medlemspesifikasjoner
  • Konklusjon

De offentlige og private spesifikasjonene

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

#inkludere
ved hjelp av navneområdet 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 nei1 = obj.num1;
retur 0;

Utgangen er 10. De private medlemmene er num1 og num2. De offentlige medlemmene er Thecla () og Method (). Merk at TheCla () er konstruktørfunksjonen som initialiserer variabler av interesse. Regionen for en tilgangspesifikator begynner fra etiketten til slutten av klassebeskrivelsen (definisjonen) eller til starten av en annen tilgangspesifikator.

I Main () -funksjonen er den første utsagnet oppstart som involverer konstruktørfunksjonen, som initialiserer NUM1 og NUM2. Den neste uttalelsen kaller det offentlige medlemmet, metoden (), i klassen.

Nå, i klassebeskrivelsen (definisjonen), får den offentlige medlemsfunksjonen, Thecla (), tilgang til de private medlemmene, NUM1 og NUM2. Også den offentlige medlemsfunksjonen, metoden (), får tilgang til det private medlemmet, NUM1. Ethvert medlem i en klassebeskrivelse kan få tilgang til ethvert annet medlem innenfor 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 bare tilgang til offentlige medlemmer av klassen. Hoved () -funksjonen, for eksempel, er en funksjon som er erklært utenfor klassebeskrivelsen. Det har vært i stand til bare å få tilgang til metoden () og Thecla () offentlige medlemmer. Inne i hovedfunksjonen () er Thecla () -funksjonen OBJ (10, 20).

En utvendig funksjon eller utenfor operatør, for eksempel Main () -funksjonen, har ikke tilgang til noen av de private medlemmene i klassen, for eksempel NUM1 eller NUM2. Fjern kommentarindikatoren, //, fra siste-men-en-uttalelsen i Main (). Hvis du prøver å kompilere programmet, må du merke deg at programmet ikke vil sammenstille, og gir en feilmelding.

Standard spesifikasjon
Standard spesifikasjon for en klasse er “privat.”Så, ovennevnte klassebeskrivelse er den samme som følgende beskrivelse, privat, men uten spesifikasjonen:

Klasse thecla

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

num1 = n1; num2 = n2;

int -metode ()

return num1;

;

Merk: Tilgangspesifikatoretiketten begynner med spesifikasjonen, og blir deretter fulgt av en tykktarm.

Den beskyttede spesifikasjonen

Innenfor en klassebeskrivelse, og fra en utvendig funksjon eller utvendig operatør, er den beskyttede spesifikasjonen den samme som den private spesifikasjonen. Bytt ut den private spesifikasjonen i ovennevnte program med spesifikasjonen, beskytt og fjern kommentarindikatoren, //, fra den siste men-en-uttalelsen i Main () -funksjonen. Hvis du prøver å kompilere programmet, må du merke deg at programmet ikke vil sammenstille, og gir en feilmelding.

Spørsmålet om den beskyttede spesifikasjonen kommer opp når medlemmer av den avledede (arvede) klassen må få tilgang til medlemmer av basen (overordnet) -klassen.

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

#inkludere
ved hjelp av navneområdet STD;
Klasse thecla

offentlig:
int num1 = 10;
beskyttet:
int num2 = 20;
privat:
int num3 = 30;
;
Klassen Childcla: Offentlig thecla

offentlig:
int Metode1 ()

return num1;

int Metode2 ()

return num2;

/*int -metode3 ()

return num3;
*/
;
int main ()

Childcla Childobj;
Int NO1 = Childobj.metode1 ();
cout<Int NO2 = Childobj.metode2 ();
cout<retur 0;

Utgangen er:

10
20

I baseklassen er NUM1 offentlig, NUM2 er beskyttet, og NUM3 er privat. I den avledede klassen er alle medlemsfunksjonene offentlige. Den første funksjonen, Method1 (), får tilgang til det offentlige datamedlemmet, NUM1. Den andre funksjonen, Method2 (), får tilgang til det beskyttede datamedlemmet, NUM2. Den tredje funksjonen, Method3 (), men for øyeblikket kommentert, bør få tilgang til det private datamedlemmet, NUM3.

En avledet klasse er ikke erklært uten tilgangspesifikator (offentlig, beskyttet eller privat). Over er den avledede klassen erklært med den offentlige spesifikasjonen, det vil si:

Klasse Childcla: public thecla

Nå av-komment den tredje medlemsfunksjonsdefinisjonen i den avledede klassen. Hvis du prøver å kompilere programmet, må du merke deg at det ikke vil sammenstille, og gi en feilmelding.

Merk: Når hele avledede klassen er erklært offentlig, kan ikke medlemmene få tilgang til de private medlemmene i baseklassen. Medlemmene kan imidlertid få tilgang til de offentlige og beskyttede medlemmene i baseklassen. Programmet ovenfor illustrerer dette.

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

Avledede klassespesifikasjoner og medlemspesifikasjoner

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

Klasse Childcla: beskyttet TheCla

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

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

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

Privat avledet klasse med offentlige medlemmer
Bytt ut den "beskyttede" spesifikasjonen med "privat" i erklæringen om den avledede klassen ovenfor, som følger:

Klassen Childcla: Privat thecla

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

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

Offentlig avledet klasse med beskyttede medlemmer
Skriv, kompilere og kjøre følgende program, der hele avledede klassen er beskyttet, og medlemmene er også beskyttet. Noen kodesegmenter er som følger:

#inkludere
ved hjelp av navneområdet STD;
Klasse thecla

offentlig:
int num1 = 10;
beskyttet:
int num2 = 20;
privat:
int num3 = 30;
;
Klassen Childcla: Offentlig thecla

beskyttet:
int Metode1 ()

return num1;

int Metode2 ()

return num2;

/*int -metode3 ()

return num3;
*/
;
int main ()

/*Childcla Childobj;
Int NO1 = Childobj.metode1 ();
cout</*int NO2 = Childobj.metode2 ();
cout<retur 0;

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

Nå, ikke-komment Funksjonsdefinisjonen, Method3 (), i den avledede klassen. Hvis du prøver å kompilere programmet, må du merke deg at det ikke vil sammenstille, og gi 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 avsluttet ovenfor, angående tilgang til et privat medlem.

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

Nå, legg kommentarene tilbake i den avledede klassen og ikke-kommenterte det første kodesegmentet i Main () -funksjonen. Hvis du prøver å samle programmet, må du merke deg at programmet ikke vil samle på grunn av det første kodesegmentet i Main () -funksjonen. Denne effekten er ikke ny. Bortsett fra den avledede klassen, utvendige funksjoner og utenfor operatører, er de beskyttede og private medlemmene av en (base eller avledet) klasse av samme spesifikasjon, private. Hoved () -funksjonen ser det beskyttede medlemmet i enhver klasse, enten det.

Hvis det andre kodesegmentet av Main () -funksjonen er ikke-kommentar, vil den samme forklaringen gjelde. Det vil si at hovedfunksjonen () ikke vil kunne få tilgang til et beskyttet eller privat medlem av den avledede klassen eller av baseklassen. Dette er uavhengig av om et beskyttet medlem av den avledede klassen kan få tilgang til et beskyttet medlem av baseklassen.

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

Klasse Childcla: beskyttet TheCla

Sett kommentaren til kodesegmentene tilbake i Main () -funksjonen, hvis dette ikke allerede er gjort. Kompilere og kjøre programmet og merk at resultatet er som før.

Privat avledet klasse med beskyttede medlemmer
Bytt ut den "beskyttede" spesifikasjonen med "privat" i erklæringen om den avledede klassen ovenfor, som følger:

Klasse Childcla: Privat Thecla

Kompilere og kjøre programmet og merk at resultatet vil være som før.

Offentlig avledet klasse med private medlemmer
Bytt ut den "private" spesifikasjonen med "offentlig" i erklæringen om den avledede klassen ovenfor, som følger:

Klasse Childcla: public thecla

Gjør medlemmene av den avledede klassen privat. Kompilere og kjøre programmet. Resultatet er ikke forskjellig fra saken om "offentlig avledet klasse med beskyttede medlemmer".

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

Klasse Childcla: beskyttet TheCla

Kompilere og kjøre programmet. Dette resultatet er ikke forskjellig fra saken om "beskyttet avledet klasse med beskyttede medlemmer".

Privat avledet klasse med private medlemmer
Bytt ut den "beskyttede" spesifikasjonen med "privat" i erklæringen om den avledede klassen ovenfor, som følger:

Klassen Childcla: Privat thecla

Kompilere og kjøre programmet. Dette resultatet er ikke forskjellig fra saken om "privat avledet klasse med beskyttede medlemmer".

Konklusjon

C ++ tilgangspesifikasjoner er ordene "private", "beskyttet" og "offentlig.”De bestemmer tilgang for medlemmer av en klasse. Regionen for en tilgangspesifikator begynner fra etiketten, til slutten av klassebeskrivelsen (definisjonen), eller til starten av en annen tilgangspesifikator. Ethvert medlem av en klasse kan få tilgang til ethvert annet medlem av den samme klassen. Et privat medlem av en klasse kan ikke nås av noen eksterne funksjoner, noen utenforstående operatør eller en avledet klasse.

Medlem av baseklassen må beskyttes slik at et privat medlem av baseklassen kan nå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 ved en hvilken som helst utenforfunksjon, enhver utenforstående operatør eller en avledet klasse. I mangel av tilgangspesifikator i en klasse, antas den private spesifikasjonen. Det vil si at standard tilgangspesifikatoren er privat.