cpp:inheritance_protected_private
Άλλες μορφές κληρονομικότητας
Εκτός από την κληρονομικότητα τύπου public (class Square: public Rectangle { };
) μπορείτε να έχετε κληρονομικότητα τύπου protected και private. Σε αυτές τις περιπτώσεις τα πεδία που κληρονομούνται μεταβάλλουν την προσβασιμότητα τους στις υποκλάσεις με βάση τον παρακάτω πίνακα.
είδος κληρονομικότητας | |||
---|---|---|---|
μέλη της γονικής κλάσης | public | protected | private |
public μέλη | public | protected | private |
protected μέλη | protected | protected | private |
private μέλη | not accessible | not accessible | not accessible |
Ανάλογα με τον είδος της κληρονομικότητας που θα επιλέξουμε, μπορούμε να έχουμε κρύψουμε μερικώς ή ολικώς τα μέρη της γονικής κλάσης. Πιο αναλυτικά, έχουμε τα εξής:
- Στην public κληρονομικότητα τα μέλη της γονικής κλάσης δεν μεταβάλλουν την προσβασιμότητα τους.
- Στην protected κληρονομικότητα τα μέλη της γονικής κλάσης που είναι public γίνονται protected για την υποκλάση. Πρακτικά, μόνο η υποκλάση και οι υποκλάσεις που θα προκύψουν από αυτή μπορούν να γνωρίζουν την ύπαρξη της συγκεκριμένης σχέσης κληρονομικότητας.
- Στην private κληρονομικότητα τα μέλη της γονικής κλάσης που είναι public ή protected γίνονται private για την υποκλάση. Πρακτικά, μόνο η υποκλάση γνωρίζει την ύπαρξη της συγκεκριμένης σχέσης κληρονομικότητας.
Δείτε το παρακάτω παράδειγμα που παραθέτει αναλυτικά τα επίπεδα της προσβασιμότητας
- PrivateProtectedInheritance.cpp
class Parent { public: int publicMember; protected: int protectedMember; private: int privateMember; }; class ChildA : public Parent { // publicMember is public // protectedMember is protected // privateMember is not accessible from ChildA }; class ChildB : protected Parent { // publicMember is protected // protectedMember is protected // privateMember is not accessible from ChildB }; class ChildC : private Parent { // 'private' is default for classes // publicMember is private (accessible) // protectedMember is private (accessible) // privateMember is not accessible from ChildC };
Στο παραπάνω παράδειγμα συμπερασματικά θα μπορούσαμε να πούμε τα εξής:
- Για την κλάση ChildA (public κληρονομικότητα) οποιαδήποτε κλάση γνωρίζει ότι η ChildA είναι απόγονος της Parent.
- Για την κλάση ChildB (protected κληρονομικότητα), μόνο η κλάση ChildB και η απόγονοι αυτής γνωρίζουν ότι η ChildB είναι απόγονος της Parent.
- Για την κλάση ChildC (private κληρονομικότητα), μόνο η κλάση ChildC γνωρίζει ότι η ChildC είναι απόγονος της Parent.
cpp/inheritance_protected_private.txt · Last modified: 2022/05/13 07:06 by gthanos