User Tools

Site Tools


cpp:inheritance_protected_private

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
cpp:inheritance_protected_private [2017/04/22 17:20] – created gthanoscpp:inheritance_protected_private [2022/05/13 07:06] (current) gthanos
Line 1: Line 1:
 ===== Άλλες μορφές κληρονομικότητας ===== ===== Άλλες μορφές κληρονομικότητας =====
  
-Εκτός από την κληρονομικότητα τύπου //public// (''class Square: public Rectangle { };'') μπορείτε να έχετε κληρονομικότητα τύπου //protected// και //private//. Σε αυτές τις περιπτώσεις η προσβασιμότητα των πεδίων της γονικής κλάσης δίνεται από τον παραπάνω πίνακα+Εκτός από την κληρονομικότητα τύπου //public// (''class Square: public Rectangle { };'') μπορείτε να έχετε κληρονομικότητα τύπου //protected// και //private//. Σε αυτές τις περιπτώσεις τα πεδία που κληρονομούνται μεταβάλλουν την προσβασιμότητα τους στις υποκλάσεις με βάση τον παρακάτω πίνακα
 ^    είδος κληρονομικότητας  ^^^ ^    είδος κληρονομικότητας  ^^^
 ^  μέλη της γονικής κλάσης  ^  public  ^  protected  ^  private  ^ ^  μέλη της γονικής κλάσης  ^  public  ^  protected  ^  private  ^
-| public μέλη  |  public  |  protected  |  not accessible  | +| public μέλη  |  public  |  protected  |  private  | 
-| protected μέλη  |  protected  |  protected  |  not accessible   |+| protected μέλη  |  protected  |  protected  |  private   |
 | private μέλη  |  not accessible  |  not accessible  |  not accessible  | | private μέλη  |  not accessible  |  not accessible  |  not accessible  |
 +
 +Ανάλογα με τον είδος της κληρονομικότητας που θα επιλέξουμε, μπορούμε να έχουμε κρύψουμε μερικώς ή ολικώς τα μέρη της γονικής κλάσης. Πιο αναλυτικά, έχουμε τα εξής:
 +  * Στην //public// κληρονομικότητα τα μέλη της γονικής κλάσης δεν μεταβάλλουν την προσβασιμότητα τους.
 +  * Στην //protected// κληρονομικότητα τα μέλη της γονικής κλάσης που είναι //public// γίνονται //protected// για την υποκλάση. Πρακτικά, μόνο η υποκλάση και οι υποκλάσεις που θα προκύψουν από αυτή μπορούν να γνωρίζουν την ύπαρξη της συγκεκριμένης σχέσης κληρονομικότητας.
 +  * Στην //private// κληρονομικότητα τα μέλη της γονικής κλάσης που είναι //public// ή //protected// γίνονται //private// για την υποκλάση. Πρακτικά, μόνο η υποκλάση γνωρίζει την ύπαρξη της συγκεκριμένης σχέσης κληρονομικότητας.
  
 Δείτε το παρακάτω παράδειγμα που παραθέτει αναλυτικά τα επίπεδα της προσβασιμότητας Δείτε το παρακάτω παράδειγμα που παραθέτει αναλυτικά τα επίπεδα της προσβασιμότητας
  
-<code cpp>+<code cpp PrivateProtectedInheritance.cpp>
 class Parent { class Parent {
 public: public:
Line 41: Line 47:
 Στο παραπάνω παράδειγμα συμπερασματικά θα μπορούσαμε να πούμε τα εξής: Στο παραπάνω παράδειγμα συμπερασματικά θα μπορούσαμε να πούμε τα εξής:
   * Για την κλάση //ChildA// (//public// κληρονομικότητα) οποιαδήποτε κλάση γνωρίζει ότι η //ChildA// είναι απόγονος της //Parent//.   * Για την κλάση //ChildA// (//public// κληρονομικότητα) οποιαδήποτε κλάση γνωρίζει ότι η //ChildA// είναι απόγονος της //Parent//.
-  * Για την κλάση //ChildB// (//protected// κληρονομικότητα), μόνο η κλάση //ChildB// και η απόγονοι αυτής γνωρίζει ότι η //ChildB// είναι απόγονος της //Parent//.+  * Για την κλάση //ChildB// (//protected// κληρονομικότητα), μόνο η κλάση //ChildB// και η απόγονοι αυτής γνωρίζουν ότι η //ChildB// είναι απόγονος της //Parent//.
   * Για την κλάση //ChildC// (//private// κληρονομικότητα), μόνο η κλάση //ChildC// γνωρίζει ότι η //ChildC// είναι απόγονος της //Parent//.   * Για την κλάση //ChildC// (//private// κληρονομικότητα), μόνο η κλάση //ChildC// γνωρίζει ότι η //ChildC// είναι απόγονος της //Parent//.
- 
-<WRAP center round tip 80%> 
-Η κληρονομικότητα τύπου //private// ή //protected// έχει περιορισμένη χρήση. 
-</WRAP> 
  
cpp/inheritance_protected_private.1492881659.txt.gz · Last modified: 2017/04/22 16:21 (external edit)