C ++ Adgangsspecifikationer

C Access Specifiers



I C ++ er en klasse et sæt variabler og funktioner, der er konfigureret til at fungere sammen. Når variablerne i klassen får værdier, opnås et objekt. Et objekt har de samme variabler og funktioner 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 de forskellige værdisæt, der er tildelt variablerne i det andet objekt. At oprette et objekt fra en klasse siges at være instantiating objektet. Selvom to forskellige objekter har de samme værdier for deres variabler, er disse objekter forskellige enheder, der er identificeret med forskellige navne i programmet. Variablerne for et objekt og dets tilsvarende klasse kaldes datamedlemmer. Objektets funktioner og tilhørende 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, private, beskyttede og offentlige. De beslutter, om et medlem kan få adgang til andre medlemmer af klassen, eller om en funktion eller operatør uden for klassen og ikke tilhører klassen kan få adgang til et hvilket som helst medlem af klassen. De beslutter også, om et medlem af en afledt (barn) klasse kan få adgang til et medlem af en forældreklasse.







Grundlæggende kendskab til C ++ er påkrævet for at forstå denne artikel og for at teste den leverede 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 offentligt eller privat. Overvej følgende program:



#omfatte
ved brug af navnerumtimer;

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

intvigtigste()
{
TheCla obj(10,tyve);
intnr2=obj.metode();
koste<<nr2<<' n';

// int no1 = obj.num1;

Vend tilbage 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. Området for en adgangsspecifikator begynder fra dets etiket til slutningen af ​​klassebeskrivelsen (definition) eller til starten af ​​en anden adgangsspecifikator.





I hovedfunktionen () er den første sætning 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 samme klassebeskrivelse; det er ligegyldigt hvilket medlem der er privat eller offentligt.



En funktion eller operatør, der ikke er angivet i klassebeskrivelsen og uden for klassebeskrivelsen, kan dog kun få adgang til offentlige medlemmer af klassen. Hovedfunktionen () er f.eks. En funktion, der erklæres uden for klassebeskrivelsen. Det har kun været i stand til at få adgang til metoden () og TheCla () offentlige medlemmer. Inde i hovedfunktionen () er funktionen TheCla () obj (10, 20).

En ekstern funktion eller en ekstern operatør, f.eks. Hovedfunktionen (), kan ikke få adgang til nogen af ​​klassens private medlemmer, f.eks. Num1 eller num2. Fjern kommentarindikatoren, //, fra den sidste-men-en-sætning i main (). Hvis du forsøger at kompilere programmet, skal du være opmærksom på, at programmet ikke vil kompilere, hvilket giver en fejlmeddelelse.

Standardspecifikator
Standardspecificatoren for en klasse er privat. Så ovenstående klassebeskrivelse er den samme som følgende beskrivelse, privat, men uden specificatoren:

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

Bemærk : etiketten til adgangsspecifikat begynder med specificatoren og efterfølges derefter af et kolon.

Den beskyttede specificator

Inden for en klassebeskrivelse og fra en ekstern funktion eller en ekstern operatør er den beskyttede specifikator den samme som den private specificer. Udskift nu den private specificer i ovenstående program med specificeren, beskyt og fjern kommentarindikatoren, //, fra sidste-men-en-sætningen i hovedfunktionen (). Hvis du forsøger at kompilere programmet, skal du være opmærksom på, at programmet ikke vil kompilere, 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 (forælder).

Offentlig afledt klasse med offentlige medlemmer
Overvej følgende program:

#omfatte
ved brug af navnerumtimer;

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

klasseChildCla: offentligTheCla
{
offentlig:
intmetode 1()
{
Vend tilbagenum1;
}
intmetode 2()
{
Vend tilbagenum2;
}
/*int metode3 ()
{
return num3;
} * /

};

intvigtigste()
{
BarnCla barnObj;
intnr. 1=barnObj.metode 1();
koste<<nr. 1<<' n';

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

Vend tilbage 0;
}

Outputtet er:
10
tyve

I baseklassen 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 datamedlem, num2. Den tredje funktion, metode3 (), selvom den i øjeblikket er kommenteret, skal 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 specificer, det vil sige:

klasseChildCla: offentligTheCla{}

Fjern nu den tredje medlemsfunktionsdefinition i den afledte klasse. Hvis du forsøger at kompilere programmet, skal du bemærke, at det ikke vil kompilere, hvilket giver en fejlmeddelelse.

Bemærk : Når hele den afledte klasse erklæres offentlig, har dens medlemmer ikke adgang til de private medlemmer af basisklassen. Dens medlemmer kan imidlertid få adgang til offentligheden 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 medlemsspecifikationer

Beskyttet afledt klasse med offentlige medlemmer
Erstat den offentlige specificer med beskyttet i erklæringen for den afledte klasse ovenfor, som følger:

klasseChildCla: beskyttetTheCla{}

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, har dens medlemmer ikke adgang til de private medlemmer af basisklassen. Dens medlemmer kan imidlertid få adgang til offentligheden 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
Erstat den beskyttede specifikator med privat i erklæringen for den afledte klasse ovenfor som følger:

klasseChildCla: privatTheCla{}

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, har dens medlemmer ikke adgang til de private medlemmer af basisklassen. Dens medlemmer kan imidlertid få adgang til offentligheden 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, kompiler 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 brug af navnerumtimer;

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

klasseChildCla: offentligTheCla
{
beskyttet:
intmetode 1()
{
Vend tilbagenum1;
}
intmetode 2()
{
Vend tilbagenum2;
}
/*int metode3 ()
{
return num3;
} * /

};

intvigtigste()
{
/*ChildCla childObj;
int no1 = childObj.method1 ();
koste<
/*int no2 = childObj.method2 ();
koste<
Vend tilbage 0;
}

Programmet fungerer, som det er. Der er ingen output, og der skal ikke være noget output, baseret på hvordan programmet er blevet skrevet.

Fjern nu kommentarfunktionsdefinitionen, metode3 (), i den afledte klasse. Hvis du forsøger at kompilere programmet, skal du bemærke, at det ikke vil kompilere, hvilket giver en fejlmeddelelse. Det betyder, at der ikke kan tilgås et privat medlem fra en ekstern funktion, en ekstern operatør eller en afledt klasse. Dette er den samme konklusion som blev konkluderet ovenfor vedrørende adgang til et privat medlem.

Bemærk : et beskyttet medlem af den beskyttede afledte klasse kan få adgang til et beskyttet medlem af basisklassen.

Nu skal du lægge kommentarerne tilbage i den afledte klasse og fjerne kommentaren fra det første kodesegment i hovedfunktionen (). Hvis du forsøger at kompilere programmet, skal du være opmærksom på, at programmet ikke vil kompilere 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 (basis eller afledt) klasse af den samme specificer, private. Funktionen main () ser det beskyttede medlem af enhver klasse, uanset om det er base eller afledt, som af samme specificator, privat og er forbudt at få adgang til den.

Hvis det andet kodesegment i hovedfunktionen () ikke kommenteres, gælder den samme forklaring. Det vil sige, at hovedfunktionen () ikke har 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
Erstat den offentlige specificer med beskyttet i erklæringen for den afledte klasse ovenfor, som følger:

klasseChildCla: beskyttetTheCla{}

Sæt kommentaren af ​​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
Erstat den beskyttede specifikator med privat i erklæringen for den afledte klasse ovenfor som følger:

klasseChildCla: privatTheCla

Kompilér og kør programmet, og bemærk, at resultatet bliver som før.

Offentlig afledt klasse med private medlemmer
Erstat den private specifikator med offentligheden i erklæringen for den afledte klasse ovenfor som følger:

klasseChildCla: offentligTheCla{}

Gør medlemmerne af den afledte klasse private. Kompilér og kør programmet. Resultatet er ikke forskelligt fra sagen Public Derived Class with Protected Members.

Beskyttet afledt klasse med private medlemmer
Erstat den offentlige specificer med beskyttet i erklæringen for den afledte klasse ovenfor, som følger:

klasseChildCla: beskyttetTheCla{}

Kompilér og kør programmet. Dette resultat adskiller sig ikke fra sagen Protected Derived Class with Protected Members.

Privat afledt klasse med private medlemmer
Erstat den beskyttede specifikator med privat i erklæringen for den afledte klasse ovenfor som følger:

klasseChildCla: privatTheCla{}

Kompilér og kør programmet. Dette resultat adskiller sig ikke fra Private Derived Class with Protected Members -sagen.

Konklusion

C ++ - adgangsspecifikatorer er ordene private, beskyttede og offentlige. De bestemmer adgang for medlemmer af en klasse. Området for en adgangsspecifikator begynder fra dets 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 samme klasse. Et privat medlem af en klasse kan ikke tilgås af en ekstern funktion, en ekstern operatør eller en afledt klasse.

Medlemmet af basisklassen skal beskyttes, så et 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 en adgangsspecifikator i en klasse antages den private specificer. Det vil sige, at standardadgangsspecifikatoren er privat.

Referencer brugt i dette værk