Spørsmålet er, bør en avledet klasse egentlig ikke være i stand til å få tilgang til en privat medlem av sin base klasse (siden utledet klasse og base klassen er relatert)? Vel, for å løse dette problemet du har en annen tilgang specifier kalt, beskyttet. Dersom et medlem av en klasse er beskyttet, kan det bli åpnet av en avledet klasse, men det kan ikke nås av en ekstern funksjon. Det kan også nås av medlemmer i klassen.
Følgende kode viser hvordan en avledet klasse kan få tilgang til en beskyttet medlem av en base klasse: # include bruker namespace std; klasse Kalkulator {beskyttet: int num1; int num2; }; klasse ChildCalculator: public Kalkulator {public: int add () {num1 = 2; num2 = 3; int sum = num1 + num2; returnere sum; }}; int main () {ChildCalculator myChildObj; int resultat = myChildObj.add (); domstol returnere 0; } Basen klassen har bare to egenskaper og ingen metode; disse egenskapene er beskyttet. Utledet klasse har en metode og ingen eiendom.
Inne i avledet klasse, er de beskyttede egenskapene til basisklassen som brukes som identifikatorer. Vanligvis, når et avledet klasse er ved hjelp av et medlem av en base klasse, er det en fremgangsmåte av den avledede klassen som ved hjelp av elementet, som i dette eksempelet. Koden ovenfor er OK. Følgende kode vil ikke kompilere, fordi linje 2 i main () -funksjonen prøver å få tilgang til en beskyttet medlem av base klassen: # include bruker namespace std; klasse Kalkulator {beskyttet: int num1; int num2; }; klasse ChildCalculator: public Kalkulator {public: int add () {num1; num2 = 3; int sum = num1 + num2; returnere sum; }}; int main () {Kalkulator obj; obj.
num1 = 2; ChildCalculator myChildObj; int resultat = myChildObj.add (); domstol returnere 0; } En ekstern funksjonen kan ikke få tilgang til en beskyttet medlem av en klasse (base klasse); men kan en avledet klasse metode tilgang til en beskyttet medlem av base klassen. Merk: Et medlem av en klass