דף הבית >> הורשה>> גישה למחלקת בסיס>> הורשה וחברים מוגנים>>הורשת מחלקת בסיס מוגנת>>פונקציות בנות ,הורסות ,והורשה >>העברת נתונים לבנאי של מחלקת בסיס >>מתן גישה

 

מתן גישה

מתי שמחלקת בסיס מורשת כפרטית ,כל החברים הצבורים והמוגנים של החלקה זו הופכים לחברים פרטים במחלקה הנגזרת.בכל מקרה ,במקרים מסויימים אתה תהיה מעוניין להחזיר את אחד או יותר מהחברים המורשים למצב הגישה המקורי.לדוגמה ,אתה מעוניין להעניק לכמה מהחברים הציבורים במחלקת הבסיס מעמד של ציבורים במחקה הנגזרת למרות שמחלקת הבסיס מורשת כפרטית .בשפת ++c רגילה יש לי שני דרכים להשיג זאת .הראשונה אתה יכול להשתמש "בהצהרת שימוש" (using statement) שזוהי דרך מובחרת .הדרך השניה להחזיר חברים מורשים למפרט גישה ,זה להפעיל הצהרת גישה בתוך המחלקה הנגזרת .הצהרות גישה נתמכים ע"י שפת ++c רגילה אבל ישנה התנגדות להשתמש בהצהרות אלו.זה אומר שין צורך להשתמש בקוד חדש בהצרות גישה , אך מכוון שיש הרבה תוכניות קיימות אשר משתמשות בהצהרות גישה ,הם יבחנו כאן,להצהרת גישה יש נוסחה כללית :

 

Base-class : : member;

בכדי לראות כיצד הצהרת גישה עובדת ,נתחיל מקטע קצר:

class base { 

public:
       int j ; // public in 
};

class derived : private base {
public :
\\ here is access declaration
       base : : j ;//make j public again
       .
       .
       . 
};


בגלל שמחלקת הבסיס מורשת כפרטית לנגזרת . החבר הציבורי j הופך לחבר לפרטי בנגזרת וע"י base:: j; ,הצהרת הגישה בתוך הנגזרת ,מחזיר את j למצבו המקורי (ציבורי).בכדי להחזיר למצב קודם אתה יכוללהשתמש בהצהרת גישה לחברים ציבורים ומוגנים,בכל מקרה אינך יכול להפוך חבר שהוא פרטי במחלקת בסיס לחבר ציבורי במחלקה הנגזרת.התוכנית הבאה תדגים הצהרת גישה :

#include <iostream.h>
 
class base  { 
       int i ; //private to base
public:        
       int  j , k ;     
       void seti (int x)  { i = x ; }
       int geti ( ) {return  i ; }
};

// inherit base as private .
class derived : private base {
public :
/ /* the next three statements override base's inheritance
       as private and restore j, seti ( ),and geti ( )to public access . *//
       base :: j ;       //make j public again -but not k
       base ::  seti ; //make seti ( ) public
       base :: geti ; //make geti ( ) public 
       // base :: i ;  //illegal , you cannot elevate access
       int a ;   // pubic
};

int main ( ) 
{
       derived  ob ;
//     ob.i = 10 ; // illegal  because I is private in derived
       ob.j = 20 ; //legal  because  j is made public in derived 
//     ob.k = 30 ; // illegal  because I is private in derived
       ob.a =40  ; legal because a is public in derived
       ob.seti ( 10 );
       cout << ob. geti ( ) << " " << ob.j << " " << ob.a ;
       return 0 ;
} 
הקודם
הבא