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
- Den beskyttede spesifikatoren
- Avledede klassespesifikatorer og medlemsspesifikatorer
- Konklusjon
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:
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<
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:
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:
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<
cout<
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 TheClaUn-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:
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:
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:
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<
cout<
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:
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:
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:
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:
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:
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