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++ Openbare, beschermde en privé-erfenis

C++ openbare, beschermde en privé-erfenis

In deze tutorial leren we met behulp van voorbeelden openbare, beschermde en private overerving in C++ te gebruiken.

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

class Base {
.... ... ....
};

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

Let op het trefwoord public in de code

class Derived : public Base

Dit betekent dat we een afgeleide klasse hebben gemaakt van de basisklasse in openbare modus . Als alternatief kunnen we ook klassen afleiden in protected of privé modi.

Deze 3 trefwoorden (public , protected , en private ) staan ​​bekend als toegangsspecificaties in C++ overerving.


openbare, beschermde en privé overerving in C++

openbaar , beschermd, en privé overerving hebben de volgende kenmerken:

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

Opmerking: private leden van de basisklasse zijn niet toegankelijk 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 not accessible from PublicDerived
};

class ProtectedDerived: protected Base {
    // x is protected
    // y is protected
    // z is not accessible from ProtectedDerived
};

class PrivateDerived: private Base {
    // x is private
    // y is private
    // z is not accessible from PrivateDerived
}

Voorbeeld 1:C++ openbare erfenis

// C++ program to demonstrate the working of public inheritance

#include <iostream>
using namespace std;

class Base {
   private:
    int pvt = 1;

   protected:
    int prot = 2;

   public:
    int pub = 3;

    // function to access private member
    int getPVT() {
        return pvt;
    }
};

class PublicDerived : public Base {
   public:
    // function to access protected member from Base
    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;
}

Uitvoer

Private = 1
Protected = 2
Public = 3

Hier hebben we PublicDerived . afgeleid van Base in openbare modus .

Als resultaat, in PublicDerived :

  • prot wordt geërfd als beschermd .
  • kroeg en getPVT() worden geërfd als openbaar .
  • pvt is ontoegankelijk omdat het privé is in Base .

Sinds privé en beschermd leden zijn niet toegankelijk vanaf main() , we moeten openbare functies maken getPVT() en getProt() om ze te openen:

// Error: member "Base::pvt" is inaccessible
cout << "Private = " << object1.pvt;

// Error: member "Base::prot" is inaccessible
cout << "Protected = " << object1.prot;

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

Dit komt omdat pvt , dat is privé in Base , is niet toegankelijk voor PublicDerived .

Echter, prot is toegankelijk voor PublicDerived wegens openbare erfenis. Dus getProt() heeft toegang tot de beveiligde variabele vanuit PublicDerived .


Toegankelijkheid in openbare erfenis

Toegankelijkheid privéleden beschermde leden openbare leden
Basisklasse Ja Ja Ja
Afgeleide klasse Nee Ja Ja

Voorbeeld 2:C++ beschermde overerving

// C++ program to demonstrate the working of protected inheritance

#include <iostream>
using namespace std;

class Base {
   private:
    int pvt = 1;

   protected:
    int prot = 2;

   public:
    int pub = 3;

    // function to access private member
    int getPVT() {
        return pvt;
    }
};

class ProtectedDerived : protected Base {
   public:
    // function to access protected member from Base
    int getProt() {
        return prot;
    }

    // function to access public member from Base
    int getPub() {
        return pub;
    }
};

int main() {
    ProtectedDerived object1;
    cout << "Private cannot be accessed." << endl;
    cout << "Protected = " << object1.getProt() << endl;
    cout << "Public = " << object1.getPub() << endl;
    return 0;
}

Uitgang

Private cannot be accessed.
Protected = 2
Public = 3

Hier hebben we ProtectedDerived . afgeleid van Base in beveiligde modus .

Als resultaat, in ProtectedDerived :

  • prot , kroeg en getPVT() worden geërfd als beschermd .
  • pvt is ontoegankelijk omdat het privé is in Base .

Zoals we weten, beschermd leden zijn niet rechtstreeks toegankelijk van buiten de klas. Als gevolg hiervan kunnen we getPVT() . niet gebruiken van ProtectedDerived .

Dat is ook de reden waarom we de getPub() . moeten maken functie in ProtectedDerived om toegang te krijgen tot de pub variabel.

// Error: member "Base::getPVT()" is inaccessible
cout << "Private = " << object1.getPVT();

// Error: member "Base::pub" is inaccessible
cout << "Public = " << object1.pub;

Toegankelijkheid in beschermde erfenis

Toegankelijkheid privéleden beschermde leden openbare leden
Basisklasse Ja Ja Ja
Afgeleide klasse Nee Ja Ja (overgenomen als beveiligde variabelen)

Voorbeeld 3:C++ privé-erfenis

// C++ program to demonstrate the working of private inheritance

#include <iostream>
using namespace std;

class Base {
   private:
    int pvt = 1;

   protected:
    int prot = 2;

   public:
    int pub = 3;

    // function to access private member
    int getPVT() {
        return pvt;
    }
};

class PrivateDerived : private Base {
   public:
    // function to access protected member from Base
    int getProt() {
        return prot;
    }

    // function to access private member
    int getPub() {
        return pub;
    }
};

int main() {
    PrivateDerived object1;
    cout << "Private cannot be accessed." << endl;
    cout << "Protected = " << object1.getProt() << endl;
    cout << "Public = " << object1.getPub() << endl;
    return 0;
}

Uitvoer

Private cannot be accessed.
Protected = 2
Public = 3

Hier hebben we PrivateDerived . afgeleid van Base in privémodus .

Als resultaat, in PrivateDerived :

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

Zoals we weten, zijn privéleden niet rechtstreeks toegankelijk van buiten de klas. Als gevolg hiervan kunnen we getPVT() . niet gebruiken van PrivateDerived .

Dat is ook de reden waarom we de getPub() . moeten maken functie in PrivateDerived om toegang te krijgen tot de pub variabel.

// Error: member "Base::getPVT()" is inaccessible
cout << "Private = " << object1.getPVT();

// Error: member "Base::pub" is inaccessible
cout << "Public = " << object1.pub;

Toegankelijkheid in privé-erfenis

Toegankelijkheid privéleden beschermde leden openbare leden
Basisklasse Ja Ja Ja
Afgeleide klasse Nee Ja (overgenomen als privévariabelen) Ja (overgenomen als privévariabelen)

C Taal

  1. Publieke cloud versus privécloud versus hybride cloud
  2. Voor- en nadelen van de openbare cloud
  3. Private Cloud voordelen en nadelen
  4. C++ variabelen, literalen en constanten
  5. C++ klassen en objecten
  6. C++ Geheugenbeheer:nieuw en verwijderen
  7. C++ vriend Functie en vriend Klassen
  8. Structuren en klassen in C++
  9. Private area network bouwt voort op het openbare Sigfox-netwerk
  10. Operators in C++ met voorbeeld:wat is, typen en programma's
  11. Verschil tussen structuur en klasse:uitgelegd met C++-voorbeeld