דף הבית>> הורשה>>גישה למחלקת בסיס

פרק 3

הורשה

הורשה זה אחד מאבני הפינה מכוון עצמים מכוון שהוא יכול ליצור מחלקות בצורה היררכית ,בשימוש של הורשה אתה יכול ליצור מחלקה כללית אשר מגדירה תכונה משותפת לקבוצה של פריטים משותפים .מחלקה זו להוריש ע"י אחרת .מחלקה אשר מקיימת הורשה נקראת נגזרת .בנוסף מחלקה נגזרת יכולה לשמש כמחלקת בסיס עבור מחלקה נגזרת אחרת,בדרך זו הורשה מוכפלת מושגת.

 

גישה למחלקת בסיס.

 

מתי שמחלקה מורישה למחלקה אחרת ,החברים של מחלקת בסיס הופכים לחברים של המחלקה הנגזרת. הורשה במחלקה בצורה כלילית נראית כך.



int Array[10];
int Array[] = {110,10,2,5};
 

זהו גוף המחלקה.מצב הגישה של חברי מחלקת הבסיס בתוך המחלקה הנגזרת נקבע ע"י הרשאות. ההרשאות במחלקת הבסיס חיבות להיות public , private או protected . אם אף אחד מתוך ההרשאות מצוין ,הרשאת הגישה תהייה private כברירת מחדל ,אם המחלקה נגזרת ממחלקה , וpublic אם המחלקה נגזרת ממבנה.כשהרשאת הגישה במחלקת הבסיס היא public ,כל חברים הציבורים של מחלקת בסיס הופכים לחברים ציבורים במחלקה הנגזרת ,והחברים המוגנים של מחלקת הבסיס הופכים לחברים מוגנים במחלקה הנגזרת .בכל המקרים , במחלקת הבסיס שמוגדרים אלמנטים פרטיים הם נשארים פרטיים במחלקת הבסיס ולא ניתנים לגישה ע"י חברי המחלקה הנגזרת .לדוגמה תוכנית הדגמה לאובייקטים מסוג הנגזרת אשר בצורה ישירה ניגשים לחברים הציבורים של מחלקת הבסיס.

#include <iostream.h>

class base { 
         int i , j ;  
public:
    void set  (int a , int b) {i = a ;j = b ;}
    void show ( ) { cout  <<  i  << " "<<  j  <<" \n "; }

};

class derived : public base {
         int  k ;
public:
         derived (int x )  {k = x ; }     
         void showk ( )  {cout  <<  k  <<  "\n "; }

};


int main  ( )

{
         derived ob ( 3 ) ;
         ob.set (1 , 2 );
         ob.show ( );
         ob.showk ( ); 
         return 0 ;
}

הסבר: ב ( ob.set( 1 , 2 ישנה גישה לחבר של מחלקת בסיס,כך גם ב ( )ob.show . ב ( )ob.showk שימוש של חבר המחלקה הנגזרת.מתי שמחלקת הבסיס מורשת ע"י שימוש בגישה ספציפית של פרטי,כל החברים הציבורים והמוגנים במחלקת הבסיס הופכים לחברים פרטיים במחלקה הנגזרת . בדוגמה הבאה התוכנית לא תתקמפל מכוון שגם ( )set ו ( ) show הם אלמנטים פרטיים בנגזרת .



#include <iostream.h>

class base { 
         int i , j ;  
public:
    void set  (int a , int b) {i = a ;j = b ;}
    void show ( ) { cout  <<  i  << " "<<  j  <<" \n "; }
};
// public elements of base  are private in derived

class derived : private base {
         int  k ;
public:
         derived (int x )  {k = x ; }     
         void showk ( )  {cout  <<  k  <<  "\n "; }
};

int main  ( )
{
         derived ob ( 3 ) ;
         ob.set (1 , 2 ); //error
         ob.show ( );  //error
         return 0 ;
}

יש טעות בתוכנית מכוון שאין גישה לחברים של פונקצית הבסיס כי מוגדרים פרטיים ורק למחלקת הבסיס יש גישה לחברים אלו .

חשוב לזכור! מתי שמחלקת הבסיס מוצהרת כפרטית ,החברים הפרטים והמוגנים של מחלקת הבסיס הופכים לפרטים במחלקה הנגזרת .

הקודם
הבא