Hvordan Hide Object Gjennomføring i C ++

I en verden av C ++, bibliotek produsenter og klient programmerere bruker bibliotekene å sette sammen programmer som ofte er større biblioteker. Biblioteker består av klasser. En C ++ klasse har adgangskontroll funksjoner som definerer strenge grensene mellom klassen produsent og klient programmerere. Dette er nødvendig for å holde klienten programmerere fra berøre viktige deler av koden, og for å gjøre det mulig bibliotek produsenter å lage interne endringer uten varsel.

Bruksanvisning

1 Forstå tilgangsbransjen som tilbys av C ++ som bestemmer klassegrensene. Disse er angitt med eksplisitte søkeord "offentlige", "private" og "beskyttet". Ved å identifisere et medlem funksjon med en av disse søkeordene, kontrollerer du tilgangsnivået fra medlemmet funksjon.

2 Bruk "offentlig" søkeord for å gjengi en definisjon tilgjengelig for alle, inkludert klient programmerere.

3 Påfør "privat" søkeord når du ikke vil at noen andre enn deg selv for å få tilgang til en klassedefinisjon. Private definisjoner kan bare nås av andre medlemsfunksjoner som tilhører klassen i spørsmålet. Tenk på "private" som en brannmur som beskytter den interne gjennomføringen av en definisjon fra en klient programmerer.

4 Erklærer en definisjon "beskyttet" når du vil bare arve klasser for å få tilgang til denne definisjonen. Arve klasser eller klasser som henter funksjonalitet fra en klasse kan ikke få tilgang til private definisjoner, men de kan få tilgang til definisjoner merket som beskyttet.

5 Se følgende eksempel for å få en bedre forståelse av trinn 2 til 4 og tilgangskontroll:


klasse CFile {

offentlig:

int Open (const char * filnavn);

privat:

bool FileExists () const;

beskyttet:

int PixelCount ();

};

// Privat funksjon "FileExists" kan brukes av medlemsfunksjoner i definisjonen

int CFile :: Open (const char * filnavn) {

if (sann == CFile :: FileExists ())

kaste ...

}

// Arve klassen kan bruke beskyttet funksjon "PixelCount" av base klasse

klasse CImageFile: public CFile {

offentlig:

void SomeFunc () {

int x = CFile :: PixelCount ();

};

};

// Utførelse område

int main () {

CFile fil;

file.Open (referral.txt);

if (sann == file.Exists ()) // kompilator feil

int x = file.PixelCount; // Kompilator feil

}

Hint

  • Begrepene "HD" og "medlem funksjon" brukes om hverandre i denne artikkelen.
  • Koden vist i trinn 5 vil ikke kompilere. Det er bare for illustrasjonsformål.