C ++ tilgangsspesifikatorer

C Access Specifiers



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 funksjonene 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 de forskjellige settene med verdier som er tilordnet variablene til det andre objektet. Det sies å lage et objekt fra en klasse for å instantere 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 tilhørende klasse kalles datamedlemmer. Funksjonene til et objekt og tilhørende klasse kalles medlemsfunksjoner. Datamedlemmer og medlemsfunksjoner kalles medlemmer.

Ordet tilgang betyr å lese eller endre verdien av en variabel, og det betyr også å bruke en funksjon. C ++ - tilgangsspesifikatorer er ordene, private, beskyttede og offentlige. 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 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 kunnskap om C ++ er nødvendig for å forstå denne artikkelen og for å teste koden.



Artikkelinnhold

De offentlige og private spesifikasjonene

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



#inkludere
ved hjelp av navneområdetimer;

klasseTheCla
{
privat:
intnum1;
intnum2;
offentlig:
TheCla(intn1,intn2)
{
num1=n1;num2=n2;
}
intmetode()
{
komme tilbakenum1;
}
};

inthoved-()
{
TheCla obj(10,tjue);
intnr2=obj.metode();
koste<<nr2<<' n';

// int no1 = obj.num1;

komme tilbake 0;
}

Utgangen er 10. De private medlemmene er num1 og num2. De offentlige medlemmene er TheCla () og method (). Vær oppmerksom på at TheCla () er konstruktorfunksjonen som initialiserer variabler av interesse. Området til en tilgangsspesifikator begynner fra etiketten til slutten av klassebeskrivelsen (definisjonen) eller til starten av en annen tilgangsspesifikator.





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

Nå, i klassebeskrivelsen (definisjonen), får den offentlige medlemsfunksjonen, TheCla () tilgang til de private medlemmene, num1 og num2. Den offentlige medlemsfunksjonen, metode (), får også tilgang til det private medlemmet, num1. Ethvert medlem i en klassebeskrivelse kan få tilgang til ethvert 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 angitt i klassebeskrivelsen og utenfor klassebeskrivelsen, kun få tilgang til offentlige medlemmer av klassen. Hovedfunksjonen () er for eksempel en funksjon deklarert 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 ekstern operatør, for eksempel hovedfunksjonen (), kan ikke få tilgang til noen av de private medlemmene i klassen, for eksempel num1 eller num2. Fjern kommentarindikatoren, //, fra den siste, men-ene-setningen i main (). Hvis du prøver å kompilere programmet, må du være oppmerksom på at programmet ikke vil kompilere og gi en feilmelding.

Standard spesifikasjon
Standardspesifikatoren for en klasse er privat. Så den ovennevnte klassebeskrivelsen er den samme som følgende beskrivelse, privat, men uten spesifisatoren:

klasseTheCla
{
intnum1;
intnum2;
offentlig:
TheCla(intn1,intn2)
{
num1=n1;num2=n2;
}
intmetode()
{
komme tilbakenum1;
}
};

Merk : etiketten for tilgangsspesifikator begynner med spesifisatoren, og blir deretter fulgt av et kolon.

Den beskyttede spesifikatoren

Innenfor en klassebeskrivelse, og fra en ekstern funksjon eller ekstern operatør, er den beskyttede spesifisatoren den samme som den private spesifisatoren. Nå, bytt ut den private spesifisatoren i programmet ovenfor med spesifisereren, beskytt og fjern kommentarindikatoren, //, fra siste-men-én-setningen i hovedfunksjonen (). Hvis du prøver å kompilere programmet, må du være oppmerksom på at programmet ikke vil kompilere og gi en feilmelding.

Problemet med den beskyttede spesifisereren kommer opp når medlemmer av den avledede (arvede) klassen må få tilgang til medlemmer av basisklassen (overordnet).

Offentlig avledet klasse med offentlige medlemmer
Vurder følgende program:

#inkludere
ved hjelp av navneområdetimer;

klasseTheCla
{
offentlig:
intnum1= 10;
beskyttet:
intnum2= tjue;
privat:
intnum3= 30;
};

klasseChildCla: offentligTheCla
{
offentlig:
intmetode 1()
{
komme tilbakenum1;
}
intmetode 2()
{
komme tilbakenum2;
}
/*int method3 ()
{
retur num3;
} * /

};

inthoved-()
{
ChildCla childObj;
intno1=barnObj.metode 1();
koste<<no1<<' n';

intnr2=barnObj.metode 2();
koste<<nr2<<' n';

komme tilbake 0;
}

Utgangen er:
10
tjue

I baseklassen 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, method2 (), får tilgang til det beskyttede datamedlemmet, num2. Den tredje funksjonen, metode3 (), selv om den er kommentert for øyeblikket, skal ha tilgang til det private datamedlemmet, num3.

En avledet klasse deklareres ikke uten tilgangsspesifikator (offentlig, beskyttet eller privat). Over er den avledede klassen deklarert med den offentlige spesifikatoren, det vil si:

klasseChildCla: offentligTheCla{}

Fjern nå den tredje medlemsfunksjonsdefinisjonen i den avledede klassen. Hvis du prøver å kompilere programmet, må du merke at det ikke vil kompilere og gi en feilmelding.

Merk : Når hele den avledede klassen er erklært offentlig, har medlemmene ikke tilgang til de private medlemmene i basisklassen. Medlemmene har imidlertid tilgang til publikum og beskyttede medlemmer av basisklassen. 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 basisklassen.

Derived Class Specifiers and Member Specifiers

Beskyttet avledet klasse med offentlige medlemmer
Erstatt den offentlige spesifikatoren med beskyttet i erklæringen fra den avledede klassen ovenfor, som følger:

klasseChildCla: beskyttetTheCla{}

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

Så når hele den avledede klassen er erklært beskyttet, kan dens medlemmer ikke få tilgang til de private medlemmene i basisklassen. Medlemmene har imidlertid tilgang til publikum og beskyttede medlemmer av basisklassen. 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 spesifisatoren med privat i erklæringen for den avledede klassen ovenfor, som følger:

klasseChildCla: privatTheCla{}

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

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

Offentlig avledet klasse med beskyttede medlemmer
Skriv, 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
ved hjelp av navneområdetimer;

klasseTheCla
{
offentlig:
intnum1= 10;
beskyttet:
intnum2= tjue;
privat:
intnum3= 30;
};

klasseChildCla: offentligTheCla
{
beskyttet:
intmetode 1()
{
komme tilbakenum1;
}
intmetode 2()
{
komme tilbakenum2;
}
/*int method3 ()
{
retur num3;
} * /

};

inthoved-()
{
/*ChildCla childObj;
int no1 = childObj.method1 ();
koste<
/*int no2 = childObj.method2 ();
koste<
komme tilbake 0;
}

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

Avmerk nå funksjonsdefinisjonen, metode3 (), i den avledede klassen. Hvis du prøver å kompilere programmet, må du merke at det ikke vil kompilere og gi en feilmelding. Dette betyr at et privat medlem ikke kan nås fra en ekstern funksjon, ekstern operatør eller avledet klasse. Dette er den samme konklusjonen som ble konkludert 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 basisklassen.

Legg nå kommentarene tilbake i den avledede klassen, og fjern den første kodesegmentet i hovedfunksjonen (). Hvis du prøver å kompilere programmet, vær 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 i en (base eller avledet) klasse av den samme spesifisatoren, private. Main () -funksjonen ser det beskyttede medlemmet i enhver klasse, enten det er base eller avledet, som av samme spesifisator, privat, og det er forbudt å få tilgang til det.

Hvis det andre kodesegmentet i hovedfunksjonen () ikke kommenteres, vil den samme forklaringen gjelde. Det vil si at hovedfunksjonen () ikke vil få tilgang til et beskyttet eller privat medlem av den avledede klassen eller i baseklassen. 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
Erstatt den offentlige spesifikatoren med beskyttet i erklæringen fra den avledede klassen ovenfor, som følger:

klasseChildCla: beskyttetTheCla{}

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

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

klasseChildCla: privatTheCla

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

Offentlig avledet klasse med private medlemmer
Erstatt den private spesifisereren med offentlig i erklæringen for den avledede klassen ovenfor, som følger:

klasseChildCla: offentligTheCla{}

Gjør medlemmene i den avledede klassen private. Kompiler og kjør programmet. Resultatet er ikke annerledes enn tilfellet Public Derived Class with Protected Members.

Beskyttet avledet klasse med private medlemmer
Erstatt den offentlige spesifikatoren med beskyttet i erklæringen fra den avledede klassen ovenfor, som følger:

klasseChildCla: beskyttetTheCla{}

Kompiler 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 spesifisatoren med privat i erklæringen for den avledede klassen ovenfor, som følger:

klasseChildCla: privatTheCla{}

Kompiler og kjør programmet. Dette resultatet er ikke forskjellig fra Private Derived Class with Protected Members -saken.

Konklusjon

C ++ - tilgangsspesifikatorer er ordene privat, beskyttet og offentlig. De bestemmer tilgang for medlemmer av en klasse. Området til en tilgangsspesifikator begynner fra etiketten, til slutten av klassebeskrivelsen (definisjonen) eller til starten av en annen tilgangsspesifikator. Ethvert medlem av en klasse kan få tilgang til alle andre medlemmer av den samme klassen. Et privat medlem av en klasse kan ikke nås av en ekstern funksjon, en ekstern operatør eller en avledet klasse.

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

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

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

Referanser brukt i dette arbeidet