C ++ åtkomstspecifikatorer

C Access Specifiers



I C ++ är en klass en uppsättning variabler och funktioner som har konfigurerats för att fungera tillsammans. När klassens variabler ges värden erhålls ett objekt. Ett objekt har samma variabler och funktioner som en klass, men den här gången har variablerna värden. Många objekt kan skapas från en klass. Ett objekt skiljer sig från ett annat objekt enligt de olika uppsättningar värden som tilldelas variablerna för det andra objektet. Att skapa ett objekt från en klass sägs vara att instantiera objektet. Även om två olika objekt har samma värden för sina variabler, är dessa objekt olika enheter, identifierade med olika namn i programmet. Variablerna för ett objekt och dess motsvarande klass kallas datamedlemmar. Objektets funktioner och dess motsvarande klass kallas medlemsfunktioner. Datamedlemmar och medlemsfunktioner kallas medlemmar.

Ordet access betyder att läsa eller ändra värdet på en variabel, och det betyder också att använda en funktion. C ++ - åtkomstspecifikatorer är orden, privata, skyddade och offentliga. De bestämmer om en medlem kan komma åt andra medlemmar i sin klass, eller om en funktion eller operatör utanför klassen och som inte tillhör klassen kan komma åt någon medlem i klassen. De beslutar också om en medlem i en härledd (barn) klass kan komma åt en medlem i en föräldraklass.







Grundläggande kunskaper i C ++ krävs för att förstå denna artikel och för att testa den angivna koden.



Artikelinnehåll

De offentliga och privata specifikationerna

Klass
Varje medlem i en klass kan komma åt alla andra medlemmar i samma klass, oberoende av vilka är märkta som offentliga eller privata. Tänk på följande program:



#omfatta
använder sig av namnrymdtimmar;

klassTheCla
{
privat:
intnum1;
intnum2;
offentlig:
TheCla(intn1,intn2)
{
num1=n1;num2=n2;
}
intmetod()
{
lämna tillbakanum1;
}
};

inthuvud()
{
TheCla obj(10,tjugo);
intnr 2=obj.metod();
kosta<<nr 2<<' n';

// int no1 = obj.num1;

lämna tillbaka 0;
}

Utgången är 10. De privata medlemmarna är num1 och num2. De offentliga medlemmarna är TheCla () och method (). Observera att TheCla () är konstruktörsfunktionen som initierar variabler av intresse. Regionen för en åtkomstspecifikator börjar från dess etikett till slutet av klassbeskrivningen (definition) eller till början av en annan åtkomstspecifikator.





I huvudfunktionen () är det första påståendet instantiering som involverar konstruktörsfunktionen, som initierar num1 och num2. Nästa uttalande kallar klassens allmänna medlem, metod ().

Nu, i klassbeskrivningen (definition), får den offentliga medlemsfunktionen, TheCla () åtkomst till de privata medlemmarna, num1 och num2. Den offentliga medlemsfunktionen, metod (), får också tillgång till den privata medlemmen, num1. Varje medlem i en klassbeskrivning kan komma åt alla andra medlemmar inom samma klassbeskrivning; det spelar ingen roll vilken medlem som är privat eller offentlig.



En funktion eller operatör som inte anges i klassbeskrivningen och utanför klassbeskrivningen kan dock endast komma åt offentliga medlemmar i klassen. Huvudfunktionen () är till exempel en funktion som deklareras utanför klassbeskrivningen. Det har bara kunnat komma åt metoden () och TheCla () offentliga medlemmar. Inne i huvudfunktionen () är funktionen TheCla () obj (10, 20).

En extern funktion eller en extern operatör, till exempel huvudfunktionen (), kan inte komma åt någon av klassens privata medlemmar, t.ex. num1 eller num2. Ta bort kommentarindikatorn, //, från sista-men-ett-uttalandet i main (). Om du försöker kompilera programmet, observera att programmet inte kommer att kompilera, vilket ger ett felmeddelande.

Standardspecifier
Standardspecifikatorn för en klass är privat. Så ovanstående klassbeskrivning är densamma som följande beskrivning, privat, men utan specifikatorn:

klassTheCla
{
intnum1;
intnum2;
offentlig:
TheCla(intn1,intn2)
{
num1=n1;num2=n2;
}
intmetod()
{
lämna tillbakanum1;
}
};

Notera : etiketten för åtkomstspecifikat börjar med specificatorn och följs sedan av ett kolon.

Den skyddade specifikatorn

Inom en klassbeskrivning och från en extern funktion eller en extern operatör är den skyddade specifikatorn densamma som den privata specifikatorn. Byt nu ut den privata specifikatorn i ovanstående program med specifikatorn, skydda och ta bort kommentarindikatorn // från sista-men-ett-uttalandet i huvudfunktionen (). Om du försöker kompilera programmet, observera att programmet inte kommer att kompilera, vilket ger ett felmeddelande.

Frågan om den skyddade specifikatorn kommer upp när medlemmar i den härledda (ärvda) klassen måste komma åt medlemmar i basklassen (överordnad).

Offentlig härledd klass med offentliga medlemmar
Tänk på följande program:

#omfatta
använder sig av namnrymdtimmar;

klassTheCla
{
offentlig:
intnum1= 10;
skyddade:
intnum2= tjugo;
privat:
intnum3= 30;
};

klassChildCla: offentligTheCla
{
offentlig:
intmetod 1()
{
lämna tillbakanum1;
}
intmetod 2()
{
lämna tillbakanum2;
}
/*int metod3 ()
{
retur num3;
} * /

};

inthuvud()
{
ChildCla childObj;
intnr 1=barnObj.metod 1();
kosta<<nr 1<<' n';

intnr 2=barnObj.metod 2();
kosta<<nr 2<<' n';

lämna tillbaka 0;
}

Utgången är:
10
tjugo

I basklassen är num1 offentlig, num2 är skyddad och num3 är privat. I den härledda klassen är alla medlemsfunktioner offentliga. Den första funktionen, metod1 (), får åtkomst till den offentliga datamedlemmen, num1. Den andra funktionen, metod2 (), får åtkomst till den skyddade datamedlemmen, num2. Den tredje funktionen, metod3 (), även om den för närvarande kommenteras, bör komma åt den privata datamedlemmen, num3.

En härledd klass deklareras inte utan en åtkomstspecifikator (offentlig, skyddad eller privat). Ovan deklareras den härledda klassen med den offentliga specifikatorn, det vill säga:

klassChildCla: offentligTheCla{}

Avmarkera nu den tredje medlemsfunktionsdefinitionen i den härledda klassen. Om du försöker kompilera programmet, notera att det inte kommer att kompilera, vilket ger ett felmeddelande.

Notera : När hela den härledda klassen förklaras offentlig kan dess medlemmar inte komma åt de privata medlemmarna i basklassen. Dess medlemmar kan dock komma åt allmänheten och skyddade medlemmar i basklassen. Ovanstående program illustrerar detta.

Observera dock att en offentlig medlem av den offentligt härledda klassen kan komma åt en skyddad medlem i basklassen.

Härledda klassspecifikatorer och medlemsspecifikatorer

Skyddad härledd klass med offentliga medlemmar
Ersätt den offentliga specifikatorn med skyddad i deklarationen för den härledda klassen ovan, enligt följande:

klassChildCla: skyddadeTheCla{}

Kompilera och kör programmet och notera att resultatet är detsamma som tidigare.

Så när hela den härledda klassen förklaras skyddad kan dess medlemmar inte komma åt de privata medlemmarna i basklassen. Dess medlemmar kan dock komma åt allmänheten och skyddade medlemmar i basklassen. Detta är detsamma som när den härledda klassen förklaras offentlig.

Notera : en skyddad medlem av den offentligt härledda klassen kan komma åt en skyddad medlem av basklassen.

Privat härledd klass med offentliga medlemmar
Ersätt den skyddade specifikatorn med privat i deklarationen för den härledda klassen ovan, enligt följande:

klassChildCla: privatTheCla{}

Kompilera och kör programmet och notera att resultatet är detsamma som tidigare.

Så när hela den härledda klassen förklaras privat kan dess medlemmar inte komma åt de privata medlemmarna i basklassen. Dess medlemmar kan dock komma åt allmänheten och skyddade medlemmar i basklassen. Detta är detsamma som när den härledda klassen förklaras skyddad eller offentlig.

Offentlig härledd klass med skyddade medlemmar
Skriv, kompilera och kör följande program där hela den härledda klassen är skyddad och dess medlemmar också skyddas. Några kodsegment är följande:

#omfatta
använder sig av namnrymdtimmar;

klassTheCla
{
offentlig:
intnum1= 10;
skyddade:
intnum2= tjugo;
privat:
intnum3= 30;
};

klassChildCla: offentligTheCla
{
skyddade:
intmetod 1()
{
lämna tillbakanum1;
}
intmetod 2()
{
lämna tillbakanum2;
}
/*int metod3 ()
{
retur num3;
} * /

};

inthuvud()
{
/*ChildCla childObj;
int no1 = childObj.method1 ();
kosta<
/*int no2 = childObj.method2 ();
kosta<
lämna tillbaka 0;
}

Programmet fungerar som det är. Det finns ingen utmatning, och det ska inte vara någon utgång, baserat på hur programmet har skrivits.

Avmarkera nu funktionsdefinitionen, metod3 (), i den härledda klassen. Om du försöker kompilera programmet, notera att det inte kommer att kompilera, vilket ger ett felmeddelande. Detta innebär att en privat medlem inte kan nås från en extern funktion, extern operatör eller härledd klass. Detta är samma slutsats som slutsatsen ovan angående tillgång till en privat medlem.

Notera : en skyddad medlem av den skyddade härledda klassen kan komma åt en skyddad medlem i basklassen.

Lägg nu tillbaka kommentarerna i den härledda klassen och avmarkera det första kodsegmentet i huvudfunktionen (). Observera att programmet inte kommer att kompilera på grund av det första kodsegmentet i huvudfunktionen () om du försöker kompilera programmet. Denna effekt är inte ny. Bortsett från den härledda klassen, externa funktioner och externa operatörer, är de skyddade och privata medlemmarna i en (bas eller härledd) klass av samma specificerare, privata. Funktionen main () ser den skyddade medlemmen i vilken klass som helst, oavsett om den är baserad eller härledd, från samma specifikatör, privat och är förbjuden att komma åt den.

Om det andra kodsegmentet i huvudfunktionen () inte kommenteras kommer samma förklaring att gälla. Det vill säga att huvudfunktionen () inte kommer att kunna komma åt en skyddad eller privat medlem av den härledda klassen eller basklassen. Detta är oberoende av om en skyddad medlem av den härledda klassen kunde komma åt en skyddad medlem av basklassen.

Skyddad härledd klass med skyddade medlemmar
Ersätt den offentliga specifikatorn med skyddad i deklarationen för den härledda klassen ovan, enligt följande:

klassChildCla: skyddadeTheCla{}

Sätt tillbaka kodsegmentens kommentar i huvudfunktionen () om detta inte redan har gjorts. Kompilera och kör programmet och notera att resultatet är som tidigare.

Privat härledd klass med skyddade medlemmar
Ersätt den skyddade specifikatorn med privat i deklarationen för den härledda klassen ovan, enligt följande:

klassChildCla: privatTheCla

Kompilera och kör programmet och notera att resultatet blir som tidigare.

Offentlig härledd klass med privata medlemmar
Ersätt den privata specifikatorn med allmänheten i deklarationen för den härledda klassen ovan, enligt följande:

klassChildCla: offentligTheCla{}

Gör medlemmarna i den härledda klassen privata. Kompilera och kör programmet. Resultatet skiljer sig inte från fallet Public Derived Class with Protected Members.

Skyddad härledd klass med privata medlemmar
Ersätt den offentliga specifikatorn med skyddad i deklarationen för den härledda klassen ovan, enligt följande:

klassChildCla: skyddadeTheCla{}

Kompilera och kör programmet. Detta resultat skiljer sig inte från fallet Protected Derived Class with Protected Members.

Privat härledd klass med privata medlemmar
Ersätt den skyddade specifikatorn med privat i deklarationen för den härledda klassen ovan, enligt följande:

klassChildCla: privatTheCla{}

Kompilera och kör programmet. Detta resultat skiljer sig inte från fallet Private Derived Class with Protected Members.

Slutsats

C ++ - åtkomstspecifikatorer är orden privata, skyddade och offentliga. De bestämmer tillgång för medlemmar i en klass. Regionen för en åtkomstspecifikator börjar från dess etikett, till slutet av klassbeskrivningen (definitionen) eller till början av en annan åtkomstspecifikator. Varje medlem i en klass kan komma åt alla andra medlemmar i samma klass. En privat medlem i en klass kan inte nås av någon extern funktion, någon extern operatör eller en härledd klass.

Medlemmen i basklassen måste skyddas så att en privat medlem i basklassen kan nås av en medlem i den härledda klassen. Denna skyddade medlem av basklassen ses som en privat medlem i basklassen av en extern funktion eller en extern operatör.

En offentlig medlem i en klass kan nås av alla externa funktioner, alla externa operatörer eller en härledd klass.

Om det inte finns någon åtkomstspecifikator i en klass antas den privata specifikatorn. Det vill säga att standardåtkomstspecifikatorn är privat.

Referenser som används i detta arbete