Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> C Sprache

Öffentliche, geschützte und private Vererbung in C++

Öffentliche, geschützte und private Vererbung in C++

In diesem Tutorial lernen wir anhand von Beispielen die öffentliche, geschützte und private Vererbung in C++ zu verwenden.

Bei der C++-Vererbung können wir in verschiedenen Zugriffsmodi eine untergeordnete Klasse von der Basisklasse ableiten. Zum Beispiel

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

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

Beachten Sie das Schlüsselwort public im Code

class Derived : public Base

Das bedeutet, dass wir im öffentlichen Modus eine abgeleitete Klasse von der Basisklasse erstellt haben . Alternativ können wir auch Klassen in protected ableiten oder privat Modi.

Diese 3 Schlüsselwörter (public , protected , und private ) werden als Zugriffsbezeichner bezeichnet in der C++-Vererbung.


öffentliche, geschützte und private Vererbung in C++

öffentlich , geschützt, und privat Vererbung haben die folgenden Merkmale:

Hinweis: private Mitglieder der Basisklasse sind für die abgeleitete Klasse nicht zugänglich.

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
}

Beispiel 1:Öffentliche Vererbung in C++

// 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;
}

Ausgabe

Private = 1
Protected = 2
Public = 3

Hier haben wir PublicDerived abgeleitet ab Base im öffentlichen Modus .

Als Ergebnis in PublicDerived :

Da privat und geschützt Mitglieder sind nicht über main() zugänglich , müssen wir öffentliche Funktionen erstellen getPVT() und getProt() um darauf zuzugreifen:

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

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

Beachten Sie, dass der getPVT() Funktion wurde in Base definiert . Aber die getProt() Funktion wurde in PublicDerived definiert .

Das liegt daran, dass pvt , die privat ist in Base , ist für PublicDerived nicht zugänglich .

Allerdings prot ist für PublicDerived zugänglich aufgrund öffentlicher Erbschaft. Also getProt() kann innerhalb von PublicDerived auf die geschützte Variable zugreifen .


Zugänglichkeit bei öffentlicher Vererbung

Barrierefreiheit private Mitglieder geschützte Mitglieder öffentliche Mitglieder
Basisklasse Ja Ja Ja
Abgeleitete Klasse Nein Ja Ja

Beispiel 2:C++ geschützte Vererbung

// 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;
}

Ausgabe

Private cannot be accessed.
Protected = 2
Public = 3

Hier haben wir ProtectedDerived abgeleitet ab Base im geschützten Modus .

Als Ergebnis in ProtectedDerived :

Wie wir wissen, geschützt Auf Mitglieder kann außerhalb des Kurses nicht direkt zugegriffen werden. Daher können wir getPVT() nicht verwenden ab ProtectedDerived .

Aus diesem Grund müssen wir auch den getPub() erstellen Funktion in ProtectedDerived um auf den pub zuzugreifen Variable.

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

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

Barrierefreiheit bei geschützter Vererbung

Barrierefreiheit private Mitglieder geschützte Mitglieder öffentliche Mitglieder
Basisklasse Ja Ja Ja
Abgeleitete Klasse Nein Ja Ja (als geschützte Variablen geerbt)

Beispiel 3:Private C++-Vererbung

// 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;
}

Ausgabe

Private cannot be accessed.
Protected = 2
Public = 3

Hier haben wir PrivateDerived abgeleitet ab Base im privaten Modus .

Als Ergebnis in PrivateDerived :

Wie wir wissen, kann von außerhalb der Klasse nicht direkt auf private Mitglieder zugegriffen werden. Daher können wir getPVT() nicht verwenden ab PrivateDerived .

Aus diesem Grund müssen wir auch den getPub() erstellen Funktion in PrivateDerived um auf den pub zuzugreifen Variable.

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

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

Barrierefreiheit bei privater Vererbung

Barrierefreiheit private Mitglieder geschützte Mitglieder öffentliche Mitglieder
Basisklasse Ja Ja Ja
Abgeleitete Klasse Nein Ja (als private Variablen geerbt) Ja (als private Variablen geerbt)

C Sprache

  1. Public Cloud vs. Private Cloud vs. Hybrid Cloud
  2. Vor- und Nachteile der öffentlichen Cloud
  3. Private Cloud-Vorteile und -Nachteile
  4. C++-Variablen, Literale und Konstanten
  5. C++-Klassen und -Objekte
  6. C++-Speicherverwaltung:neu und löschen
  7. C++ Friend-Funktion und Friend-Klassen
  8. Strukturen und Klassen in C++
  9. Private Area Network baut auf dem öffentlichen Sigfox-Netzwerk auf
  10. Unterschied zwischen Struktur und Klasse:Erklärt mit C++-Beispiel