User Tools

Site Tools


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