===== Άλλες μορφές κληρονομικότητας ===== Εκτός από την κληρονομικότητα τύπου //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// για την υποκλάση. Πρακτικά, μόνο η υποκλάση γνωρίζει την ύπαρξη της συγκεκριμένης σχέσης κληρονομικότητας. Δείτε το παρακάτω παράδειγμα που παραθέτει αναλυτικά τα επίπεδα της προσβασιμότητας 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//.