Σε αυτό το σεμινάριο, θα μάθουμε να χρησιμοποιούμε δημόσια, προστατευμένη και ιδιωτική κληρονομιά στο C ++ με τη βοήθεια παραδειγμάτων.
Στην κληρονομιά C ++, μπορούμε να αντλήσουμε μια παιδική τάξη από την κατηγορία βάσης σε διαφορετικούς τρόπους πρόσβασης. Για παράδειγμα,
class Base (… .… … . ); class Derived : public Base (… .… … . );
Παρατηρήστε τη λέξη-κλειδί publicστον κώδικα
class Derived : public Base
Αυτό σημαίνει ότι έχουμε δημιουργήσει μια παράγωγη κλάση από τη βασική τάξη σε δημόσια λειτουργία . Εναλλακτικά, μπορούμε επίσης να αντλήσουμε τάξεις σε προστατευμένους ή ιδιωτικούς τρόπους.
Αυτές οι 3 λέξεις-κλειδιά ( public, protectedκαι private) είναι γνωστές ως προσδιοριστές πρόσβασης στην κληρονομιά C ++.
δημόσια, προστατευόμενη και ιδιωτική κληρονομιά στο C ++
δημόσια , προστατευμένη και ιδιωτική κληρονομιά έχουν τα ακόλουθα χαρακτηριστικά:
- Η δημόσια κληρονομιά κάνει τα
publicμέλη της βασικής τάξηςpublicστην παράγωγη τάξη και ταprotectedμέλη της βασικής τάξης παραμένουνprotectedστην παράγωγη τάξη. - η προστατευόμενη κληρονομιά δημιουργεί τα
publicκαι ταprotectedμέλη της βασικής τάξηςprotectedστην παράγωγη κατηγορία. - Η ιδιωτική κληρονομιά κάνει τα μέλη
publicκαι ταprotectedμέλη της βασικής τάξηςprivateστην παράγωγη κατηγορία.
Σημείωση: τα private μέλη της βασικής τάξης δεν είναι προσβάσιμα στην παράγωγη κλάση.
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 )
Παράδειγμα 1: Δημόσια κληρονομιά C ++
// C++ program to demonstrate the working of public inheritance #include 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; )
Παραγωγή
Ιδιωτικό = 1 Προστατευμένο = 2 Δημόσιο = 3
Εδώ, έχουμε προέρχεται PublicDerivedαπό Baseτο δημόσια λειτουργία .
Ως αποτέλεσμα, σε PublicDerived:
- Το prot κληρονομείται ως προστατευμένο .
- παμπ και
getPVT()κληρονομείται ως δημόσια . - Pvt είναι απροσπέλαστη, δεδομένου ότι είναι ιδιωτική σε
Base.
Δεδομένου ότι τα ιδιωτικά και προστατευμένα μέλη δεν είναι προσβάσιμα, πρέπει να δημιουργήσουμε δημόσιες λειτουργίες getPVT()και getProt()να έχουμε πρόσβαση σε αυτά:
// Error: member "Base::pvt" is inaccessible cout << "Private = " << object1.pvt; // Error: member "Base::prot" is inaccessible cout << "Protected = " << object1.prot;
Προσβασιμότητα στη δημόσια κληρονομιά
| Προσιτότητα | ιδιωτικά μέλη | προστατευμένα μέλη | δημόσια μέλη |
|---|---|---|---|
| Κατηγορία βάσης | Ναί | Ναί | Ναί |
| Παράγωγη τάξη | Οχι | Ναί | Ναί |
Παράδειγμα 2: C ++ προστατευμένη κληρονομικότητα
// C++ program to demonstrate the working of protected inheritance #include 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; )
Παραγωγή
Δεν είναι δυνατή η πρόσβαση σε ιδιωτικό. Προστατευμένο = 2 Δημόσιο = 3
Εδώ, έχουμε προέρχεται ProtectedDerivedαπό Baseτο προστατευμένη λειτουργία .
Ως αποτέλεσμα, σε ProtectedDerived:
- prot, pub και
getPVT()κληρονομούνται ως προστατευόμενα . pvtείναι απροσπέλαστη, δεδομένου ότι είναι ιδιωτική σεBase.
Όπως γνωρίζουμε, δεν είναι δυνατή η απευθείας πρόσβαση στα προστατευόμενα μέλη.
Ως εκ τούτου, δεν μπορούμε να χρησιμοποιήσουμε getPVT()από ProtectedDerived. Αυτός είναι και ο λόγος για τον οποίο πρέπει να δημιουργήσουμε τη getPub()συνάρτηση ProtectedDerivedπροκειμένου να έχουμε πρόσβαση στη μεταβλητή pub.
// Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;
Προσβασιμότητα στην προστατευόμενη κληρονομικότητα
| Προσιτότητα | ιδιωτικά μέλη | προστατευμένα μέλη | δημόσια μέλη |
|---|---|---|---|
| Κατηγορία βάσης | Ναί | Ναί | Ναί |
| Παράγωγη τάξη | Οχι | Ναί | Ναι (κληρονομείται ως προστατευμένες μεταβλητές) |
Παράδειγμα 3: C ++ ιδιωτική κληρονομικότητα
// C++ program to demonstrate the working of private inheritance #include 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; )
Παραγωγή
Δεν είναι δυνατή η πρόσβαση σε ιδιωτικό. Προστατευμένο = 2 Δημόσιο = 3
Εδώ, έχουμε προέρχεται PrivateDerivedαπό Baseτο ιδιωτικό λειτουργία .
Ως αποτέλεσμα, σε PrivateDerived:
- prot
pubκαιgetPVT()κληρονομούνται ως ιδιωτικά . - Pvt είναι απροσπέλαστη, δεδομένου ότι είναι ιδιωτική σε
Base.
Όπως γνωρίζουμε, δεν είναι δυνατή η άμεση πρόσβαση σε ιδιωτικά μέλη.
Ως εκ τούτου, δεν μπορούμε να χρησιμοποιήσουμε getPVT()από PrivateDerived. Αυτός είναι και ο λόγος για τον οποίο πρέπει να δημιουργήσουμε τη getPub()συνάρτηση PrivateDerivedπροκειμένου να έχουμε πρόσβαση στη μεταβλητή pub.
// Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;
Προσβασιμότητα στην ιδιωτική κληρονομιά
| Προσιτότητα | ιδιωτικά μέλη | προστατευμένα μέλη | δημόσια μέλη |
|---|---|---|---|
| Κατηγορία βάσης | Ναί | Ναί | Ναί |
| Παράγωγη τάξη | Οχι | Ναι (κληρονομείται ως ιδιωτικές μεταβλητές) | Ναι (κληρονομείται ως ιδιωτικές μεταβλητές) |








