C++

C++-toegangsspecificaties

C++-toegangsspecificaties
In C++ is een klasse een set variabelen en functies die zijn geconfigureerd om samen te werken. Wanneer de variabelen van de klasse waarden krijgen, wordt een object verkregen. Een object heeft dezelfde variabelen en functies als een klasse, maar deze keer hebben de variabelen waarden. Er kunnen veel objecten worden gemaakt vanuit één klasse. Een object verschilt van een ander object volgens de verschillende set waarden die zijn toegewezen aan de variabelen van het andere object. Het maken van een object van een klasse zou het object instantiëren. Zelfs als twee verschillende objecten dezelfde waarden hebben voor hun variabelen, zijn deze objecten verschillende entiteiten, geïdentificeerd door verschillende namen in het programma. De variabelen voor een object en de bijbehorende klasse worden gegevensleden genoemd. De functies van een object en de bijbehorende klasse worden lidfuncties genoemd. Gegevensleden en lidfuncties worden leden genoemd.

Het woord toegang betekent de waarde van een variabele lezen of wijzigen, en het betekent ook een functie gebruiken. C++-toegangsspecificaties zijn de woorden "privé", "beschermd" en "openbaar".Ze beslissen of een lid toegang heeft tot andere leden van zijn klas, of dat een functie of operator buiten de klas en die niet tot de klas behoort toegang heeft tot een lid van de klas. Ze beslissen ook of een lid van een afgeleide (onderliggende) klasse toegang heeft tot een lid van een bovenliggende klasse.

Basiskennis van C++ is vereist om dit artikel te begrijpen en de verstrekte code te testen test.

Artikel Inhoud

De publieke en private specificaties

Klasse
Elk lid van een klas heeft toegang tot elk ander lid van dezelfde klas, waarvan de naam "openbaar" of "privé" is.Beschouw het volgende programma:

#include
namespace std; gebruiken;
klasse TheCla

privaat:
int num1;
int num2;
openbaar:
DeCla(int n1, int n2)

aantal1 = n1; aantal2 = n2;

int methode()

retour num1;

;
int hoofd()

TheCla obj(10, 20);
int no2 = obj.methode();
cout<//int no1 = obj.nummer1;
retourneer 0;

De uitvoer is 10. De privéleden zijn num1 en num2. De openbare leden zijn TheCla() en methode(). Merk op dat TheCla() de constructorfunctie is die variabelen van belang initialiseert. De regio van een toegangsspecificatie begint vanaf het label tot het einde van de klassebeschrijving (definitie) of tot het begin van een andere toegangsspecificatie.

In de functie main() is de eerste instructie de instantie waarbij de constructorfunctie betrokken is, die num1 en num2 initialiseert. De volgende instructie roept het openbare lid, method(), van de klasse aan.

Nu, in de klassebeschrijving (definitie), heeft de openbare lidfunctie, TheCla(), toegang tot de privéleden, num1 en num2. Ook heeft de openbare lidfunctie, method(), toegang tot het privélid, num1. Elk lid binnen een klasbeschrijving heeft toegang tot elk ander lid binnen dezelfde klasbeschrijving; het maakt niet uit welk lid privé of openbaar is.

Een functie of operator die niet is gedeclareerd in de klassebeschrijving en buiten de klassebeschrijving, heeft echter alleen toegang tot openbare leden van de klasse. De functie main() is bijvoorbeeld een functie die buiten de klassebeschrijving wordt gedeclareerd. Het heeft alleen toegang gekregen tot de methode() en de openbare leden van TheCla(). Binnen de functie main() is de functie TheCla() obj(10, 20).

Een externe functie of externe operator, zoals de functie main(), heeft geen toegang tot de privéleden van de klasse, zoals num1 of num2. Verwijder de commentaarindicator, //, van de voorlaatste instructie in main(). Als u probeert het programma te compileren, houd er dan rekening mee dat het programma niet zal compileren en een foutmelding geeft.

Standaard specificatie
De standaardspecificatie voor een klasse is "privé".Dus de bovenstaande klassebeschrijving is hetzelfde als de volgende beschrijving, privé, maar zonder de specificatie:

klasse TheCla

int num1;
int num2;
openbaar:
DeCla(int n1, int n2)

aantal1 = n1; aantal2 = n2;

int methode()

retour num1;

;

Opmerking: het toegangsspecificatielabel begint met de specificatie en wordt gevolgd door een dubbele punt.

De beschermde specificatie

Binnen een klassebeschrijving, en van een externe functie of externe operator, is de beschermde specificatie dezelfde als de private specificatie. Vervang nu de private specificatie in het bovenstaande programma door de specificatie, bescherm en verwijder de commentaarindicator, //, van de voorlaatste instructie in de main() functie. Als u probeert het programma te compileren, houd er dan rekening mee dat het programma niet zal compileren en een foutmelding geeft.

Het probleem van de beschermde specificatie doet zich voor wanneer leden van de afgeleide (overgenomen) klasse toegang moeten hebben tot leden van de basisklasse (ouder).

Publiek afgeleide klasse met openbare leden
Denk aan het volgende programma:

#include
namespace std; gebruiken;
klasse TheCla

openbaar:
int aantal1 = 10;
beschermd:
int aantal2 = 20;
privaat:
int aantal3 = 30;
;
klas ChildCla : openbaar TheCla

openbaar:
int methode1()

retour num1;

int methode2()

retour nummer2;

/*int methode3()

retour num3;
*/
;
int hoofd()

KindCla kindObj;
int no1 = childObj.methode1();
cout<int no2 = childObj.methode2();
cout<retourneer 0;

De uitvoer is:
10
20

In de basisklasse is num1 openbaar, is num2 beveiligd en is num3 privé. In de afgeleide klasse zijn alle lidfuncties openbaar. De eerste functie, methode1(), geeft toegang tot het openbare gegevenslid num1. De tweede functie, method2(), geeft toegang tot het beveiligde gegevenslid num2. De derde functie, method3(), hoewel momenteel uit commentaar, zou toegang moeten hebben tot het privégegevenslid, num3.

Een afgeleide klasse wordt niet gedeclareerd zonder een toegangsspecificatie (openbaar, beveiligd of privé). Hierboven wordt de afgeleide klasse gedeclareerd met de openbare specificatie, dat wil zeggen:

klasse ChildCla : openbare TheCla

Maak nu commentaar op de derde lidfunctiedefinitie in de afgeleide klasse. Als u het programma probeert te compileren, houd er dan rekening mee dat het niet zal compileren en een foutmelding geeft.

Opmerking: Wanneer de hele afgeleide klasse openbaar is verklaard, hebben de leden geen toegang tot de privéleden van de basisklasse. De leden hebben echter toegang tot de openbare en beschermde leden van de basisklasse. Bovenstaand programma illustreert dit.

Houd er echter rekening mee dat een openbaar lid van de openbare afgeleide klasse toegang heeft tot een beschermd lid van de basisklasse.

Afgeleide klassespecificaties en ledenspecificaties

Beschermde afgeleide klasse met openbare leden
Vervang de specificatie "public" door "protected" in de verklaring van de afgeleide klasse hierboven, als volgt:

klasse ChildCla : beschermde TheCla

Compileer en voer het programma uit en merk op dat het resultaat hetzelfde is als voorheen.

Dus als de hele afgeleide klasse beschermd wordt verklaard, hebben de leden geen toegang tot de privéleden van de basisklasse. De leden hebben echter toegang tot de openbare en beschermde leden van de basisklasse. Dit is hetzelfde als wanneer de afgeleide klasse openbaar wordt verklaard.

Opmerking: een beschermd lid van de openbare afgeleide klasse heeft toegang tot een beschermd lid van de basisklasse.

Privé afgeleide les met openbare leden
Vervang de "beschermde" specificatie door "private" in de verklaring van de afgeleide klasse hierboven, als volgt:

klasse ChildCla : privé TheCla

Compileer en voer het programma uit en merk op dat het resultaat hetzelfde is als voorheen.

Dus als de hele afgeleide klasse privé wordt verklaard, hebben de leden geen toegang tot de privéleden van de basisklasse. De leden hebben echter toegang tot de openbare en beschermde leden van de basisklasse. Dit is hetzelfde als wanneer de afgeleide klasse beschermd of openbaar wordt verklaard.

Publieke afgeleide les met beschermde leden
Typ, compileer en voer het volgende programma uit, waarin de hele afgeleide klasse is beveiligd en de leden ervan ook zijn beveiligd:. Sommige codesegmenten zijn als volgt:

#include
namespace std; gebruiken;
klasse TheCla

openbaar:
int aantal1 = 10;
beschermd:
int aantal2 = 20;
privaat:
int aantal3 = 30;
;
klas ChildCla : openbaar TheCla

beschermd:
int methode1()

retour num1;

int methode2()

retour nummer2;

/*int methode3()

retour num3;
*/
;
int hoofd()

/*ChildCla childObj;
int no1 = childObj.methode1();
cout</*int no2 = childObj.methode2();
cout<retourneer 0;

Het programma werkt zoals het is. Er is geen uitvoer, en er wordt verondersteld dat er geen uitvoer is, gebaseerd op hoe het programma is getypt.

Maak nu het commentaar van de functiedefinitie, method3(), in de afgeleide klasse ongedaan. Als u probeert het programma te compileren, houd er dan rekening mee dat het niet zal compileren, met een foutmelding. Dit betekent dat een privélid niet toegankelijk is vanuit een externe functie, externe operator of afgeleide klasse. Dit is dezelfde conclusie als hierboven werd geconcludeerd met betrekking tot toegang tot een privélid.

Opmerking: een beschermd lid van de beschermde afgeleide klasse heeft toegang tot een beschermd lid van de basisklasse.

Plaats nu de opmerkingen terug in de afgeleide klasse en verwijder het commentaar op het eerste codesegment in de functie main(). Als u het programma probeert te compileren, houd er dan rekening mee dat het programma niet zal compileren vanwege het eerste codesegment in de main()-functie. Dit effect is niet nieuw. Afgezien van de afgeleide klasse, externe functies en externe operators, zijn de beschermde en privéleden van een (basis- of afgeleide) klasse van dezelfde specificatie, privé. De functie main() ziet het beschermde lid van elke klasse, of het nu basis of afgeleid is, als van dezelfde specificatie, privé, en het is verboden er toegang toe te krijgen.

Als het tweede codesegment van de functie main() geen commentaar heeft, is dezelfde uitleg van toepassing. Dat wil zeggen dat de functie main() geen toegang heeft tot een beschermd of privélid van de afgeleide klasse of van de basisklasse. Dit is onafhankelijk van het feit of een beschermd lid van de afgeleide klasse toegang kan krijgen tot een beschermd lid van de basisklasse.

Beschermde afgeleide klasse met beschermde leden
Vervang de specificatie "public" door "protected" in de verklaring van de afgeleide klasse hierboven, als volgt:

klasse ChildCla : beschermde TheCla

Zet het commentaar van de codesegmenten terug in de main() functie, als dit nog niet gedaan is. Compileer en voer het programma uit en merk op dat het resultaat is zoals voorheen.

Privé afgeleide les met beschermde leden
Vervang de "beschermde" specificatie door "private" in de verklaring van de afgeleide klasse hierboven, als volgt:

klas ChildCla : privé TheCla

Compileer en voer het programma uit en merk op dat het resultaat zal zijn zoals voorheen.

Publieke afgeleide les met privéleden
Vervang de specificatie "private" door "public" in de verklaring van de afgeleide klasse hierboven, als volgt:

klasse ChildCla : openbare TheCla

Maak de leden van de afgeleide klasse privé. Het programma compileren en uitvoeren. Het resultaat is niet anders dan de casus "Openbaar afgeleide les met beschermde leden".

Beschermde afgeleide klasse met privéleden
Vervang de specificatie "public" door "protected" in de verklaring van de afgeleide klasse hierboven, als volgt:

klasse ChildCla : beschermde TheCla

Het programma compileren en uitvoeren. Dit resultaat verschilt niet van het geval "Beschermde afgeleide klasse met beschermde leden".

Privé afgeleide les met privéleden
Vervang de "beschermde" specificatie door "private" in de verklaring van de afgeleide klasse hierboven, als volgt:

klasse ChildCla : privé TheCla

Het programma compileren en uitvoeren. Dit resultaat verschilt niet van het geval "Private Derived Class with Protected Members".

Conclusie

C++-toegangsspecificaties zijn de woorden "private", "protected" en "public".” Zij beslissen over toegang voor leden van een klas. De regio van een toegangsspecificatie begint vanaf het label, tot het einde van de klassebeschrijving (definitie), of tot het begin van een andere toegangsspecificatie. Elk lid van een klas heeft toegang tot elk ander lid van dezelfde klas. Een privélid van een klasse is niet toegankelijk voor een externe functie, een externe operator of een afgeleide klasse.

Het lid van de basisklasse moet worden beschermd zodat een privélid van de basisklasse kan worden benaderd door een lid van de afgeleide klasse. Dit beschermde lid van de basisklasse wordt door een externe functie of een externe operator gezien als een privélid van de basisklasse.

Een openbaar lid van een klasse is toegankelijk voor elke externe functie, elke externe operator of een afgeleide klasse.

Als er geen toegangsspecificatie in een klasse is, wordt de privéspecificatie verondersteld. Dat wil zeggen, de standaard toegangsspecificatie is privé.

Referenties gebruikt in dit werk

  • Alireza Ebrahimi, ERFENIS: HERBRUIKBAARHEID EN UITBREIDBAARHEID
  • S. Malik, gegevensstructuren met behulp van C++ 2e editie
Hoe de muisaanwijzer en cursorgrootte, kleur en schema op Windows 10 te veranderen
De muisaanwijzer en cursor in Windows 10 zijn zeer belangrijke aspecten van het besturingssysteem. Dit geldt ook voor andere besturingssystemen, dus i...
Gratis en open source game-engines voor het ontwikkelen van Linux-games
Dit artikel behandelt een lijst met gratis en open source game-engines die kunnen worden gebruikt voor het ontwikkelen van 2D- en 3D-games op Linux. E...
Shadow of the Tomb Raider voor Linux-zelfstudie
Shadow of the Tomb Raider is de twaalfde toevoeging aan de Tomb Raider-serie - een actie-avonturengame-franchise gemaakt door Eidos Montreal. De game ...