Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

C++ Overerving Beheersen: Public, Protected & Private Uitgelegd

C++ Public, Protected en Private Overerving

In deze tutorial leren we public, protected en private overerving in C++ gebruiken met behulp van voorbeelden.

In C++ overerving kunnen we een afgeleide klasse afleiden van de basisklasse in verschillende toegangsmodi. Bijvoorbeeld,

class Base { .... ... .... }; class Derived : public Base { .... ... .... };

Let op het sleutelwoord public in de code

class Derived : public Base

Dit betekent dat we een afgeleide klasse hebben gemaakt van de basisklasse in de public modus. Alternatief kunnen we klassen ook afleiden in protected of private modus.

Deze 3 sleutelwoorden (public, protected en private) zijn bekend als toegangsspecificaties in C++ overerving.


public, protected en private overerving in C++

public, protected en private overerving hebben de volgende kenmerken:

  • public overerving maakt public leden van de basisklasse public in de afgeleide klasse, en de protected leden van de basisklasse blijven protected in de afgeleide klasse.
  • protected overerving maakt de public en protected leden van de basisklasse protected in de afgeleide klasse.
  • private overerving maakt de public en protected leden van de basisklasse private in de afgeleide klasse.

Let op: private leden van de basisklasse zijn onbereikbaar voor de afgeleide klasse.

class Base { public: int x; protected: int y; private: int z; }; class PublicDerived: public Base { // x is public // y is protected // z is niet toegankelijk vanuit PublicDerived }; class ProtectedDerived: protected Base { // x is protected // y is protected // z is niet toegankelijk vanuit ProtectedDerived }; class PrivateDerived: private Base { // x is private // y is private // z is niet toegankelijk vanuit PrivateDerived }

Voorbeeld 1: C++ public Overerving

// C++ programma om de werking van public overerving te demonstreren #include <iostream> using namespace std; class Base { private: int pvt = 1; protected: int prot = 2; public: int pub = 3; // functie om private lid te benaderen int getPVT() { return pvt; } }; class PublicDerived : public Base { public: // functie om protected lid van Base te benaderen int getProt() { return prot; } }; int main() { PublicDerived object1; cout << "Private = " << object1.getPVT() << endl; cout << "Protected = " << object1.getProt() << endl; cout << "Public = " << object1.pub << endl; return 0; }

Output

Private = 1 Protected = 2 Public = 3

Hier hebben we PublicDerived afgeleid van Base in de public modus.

Als resultaat in PublicDerived:

  • prot wordt geërfd als protected.
  • pub en getPVT() worden geërfd als public.
  • pvt is onbereikbaar omdat het private is in Base.

Omdat private en protected leden niet toegankelijk zijn vanuit main(), moeten we publieke functies getPVT() en getProt() maken om ze te benaderen:

// Fout: lid "Base::pvt" is onbereikbaar cout << "Private = " << object1.pvt; // Fout: lid "Base::prot" is onbereikbaar cout << "Protected = " << object1.prot;

Let op dat de getPVT() functie is gedefinieerd binnen Base. Maar de getProt() functie is gedefinieerd binnen PublicDerived.

Dit is omdat pvt, wat private is in Base, onbereikbaar is voor PublicDerived.

Echter, prot is toegankelijk voor PublicDerived door public overerving. Dus getProt() kan de protected variabele benaderen vanuit PublicDerived.


Toegankelijkheid in public Overerving

Toegankelijkheid private leden protected leden public leden
Basisklasse Ja Ja Ja
Afgeleide Klasse Nee Ja Ja

Voorbeeld 2: C++ protected Overerving

// C++ programma om de werking van protected overerving te demonstreren #include <iostream> using namespace std; class Base { private: int pvt = 1; protected: int prot = 2; public: int pub = 3; // functie om private lid te benaderen int getPVT() { return pvt; } }; class ProtectedDerived : protected Base { public: // functie om protected lid van Base te benaderen int getProt() { return prot; } // functie om public lid van Base te benaderen int getPub() { return pub; } }; int main() { ProtectedDerived object1; cout << "Private kan niet worden benaderd." << endl; cout << "Protected = " << object1.getProt() << endl; cout << "Public = " << object1.getPub() << endl; return 0; }

Output

Private kan niet worden benaderd. Protected = 2 Public = 3

Hier hebben we ProtectedDerived afgeleid van Base in de protected modus.

Als resultaat in ProtectedDerived:

  • prot, pub en getPVT() worden geërfd als protected.
  • pvt is onbereikbaar omdat het private is in Base.

Zoals we weten, kunnen protected leden niet direct van buiten de klasse worden benaderd. Als resultaat kunnen we getPVT() niet gebruiken vanuit ProtectedDerived.

Dat is ook de reden waarom we de getPub() functie in ProtectedDerived moeten maken om de pub variabele te benaderen.

// Fout: lid "Base::getPVT()" is onbereikbaar cout << "Private = " << object1.getPVT(); // Fout: lid "Base::pub" is onbereikbaar cout << "Public = " << object1.pub;

Toegankelijkheid in protected Overerving

Toegankelijkheid private leden protected leden public leden
Basisklasse Ja Ja Ja
Afgeleide Klasse Nee Ja Ja (geërfd als protected variabelen)

Voorbeeld 3: C++ private Overerving

// C++ programma om de werking van private overerving te demonstreren #include <iostream> using namespace std; class Base { private: int pvt = 1; protected: int prot = 2; public: int pub = 3; // functie om private lid te benaderen int getPVT() { return pvt; } }; class PrivateDerived : private Base { public: // functie om protected lid van Base te benaderen int getProt() { return prot; } // functie om private lid te benaderen int getPub() { return pub; } }; int main() { PrivateDerived object1; cout << "Private kan niet worden benaderd." << endl; cout << "Protected = " << object1.getProt() << endl; cout << "Public = " << object1.getPub() << endl; return 0; }

Output

Private kan niet worden benaderd. Protected = 2 Public = 3

Hier hebben we PrivateDerived afgeleid van Base in de private modus.

Als resultaat in PrivateDerived:

  • prot, pub en getPVT() worden geërfd als private.
  • pvt is onbereikbaar omdat het private is in Base.

Zoals we weten, kunnen private leden niet direct van buiten de klasse worden benaderd. Als resultaat kunnen we getPVT() niet gebruiken vanuit PrivateDerived.

Dat is ook de reden waarom we de getPub() functie in PrivateDerived moeten maken om de pub variabele te benaderen.

// Fout: lid "Base::getPVT()" is onbereikbaar cout << "Private = " << object1.getPVT(); // Fout: lid "Base::pub" is onbereikbaar cout << "Public = " << object1.pub;

Toegankelijkheid in private Overerving

Toegankelijkheid private leden protected leden public leden
Basisklasse Ja Ja Ja
Afgeleide Klasse Nee Ja (geërfd als private variabelen) Ja (geërfd als private variabelen)

C Taal

  1. C++ Structuren vs Classes: Een praktische gids voor embedded-ontwikkelaars
  2. Sigfox lanceert Private Area Network, verbetert geolocatie en breidt IoT-oplossingen uit
  3. De Juiste Cloudstrategie Kiezen: Publieke, Privé en Hybride Oplossingen Uitgelegd
  4. Publieke Cloud: Voordelen, Risico's en Belangrijke Overwegingen
  5. Privé Cloud: Voordelen, Nadelen en Hoe Het Uw Bedrijfsdata Beschermt
  6. C++ variabelen, literalen en constanten: een uitgebreide gids
  7. C++ klassen & objecten: praktische gids voor object-georiënteerd programmeren
  8. C++ Geheugenbeheer meesteren: Expert gebruik van new en delete
  9. C++ Friend Functies en Friend Classes: Toegangscontrole Beheersen
  10. C++ Operators Uitgelegd: Typen, Voorbeelden en Voorbeeldprogramma's
  11. C++ Struct vs Class: Belangrijkste Verschillen, Syntaxis en Beste Gebruikssituaties