next up previous contents
Elõre: Virtuális függvények Fel: Mezõhozzáférés Vissza: Mezõhozzáférési szintek

Mezõhozzáférés és öröklés

A mezõhozzáférés és az öröklés egymással szoros kapcsolatban állnak. Ennek áttekintéséhez a point típusnak a location-ból levezetett változatát használjuk úgy, hogy már a mezõhozzáférést is szabályozzuk.

enum  colortype { black, red, blue, green, yellow, white };
class location {
                 protected:// A csak vedett mezoket a szar-
                           // maztatott tipusok is elerhetik
                   int     x;
                   int     y;
                 public:   // Publikus fuggvenyek a kulvilagnak
                   int     get_x(void);
                   int     get_y(void);
                   location(int ix, int iy); // Konstruktor
                   ~location(void);          // Destruktor                     
                                 
               };
class point : public location
               { // A publikus szarmaztatas azt jelenti, hogy
                 // 'location' mezoinek hozzaferesi szintjei
                 // valtozatlanul oroklodnek.
                 protected: // A leszarmazottak is lathatjak
                   colortype color;
                 public:
                   colortype get_color(void);
                   void      show(void);
                   void      hide(void);                                       
   
                   point(int ix, iy);        // Konstruktor
                   ~point(void);             // Destruktor                     
  
               };
A location adatmezõit - a class-ra vonatkozó private alapértelmezéssel szemben - csak védettnek deklaráljuk, hogy a származtatott típusok - például a point - is hozzáférhessenek, de azért akárhonnan mégse legyenek elérhetõk. A függvénymezõket (a konstruktort is ideértve) nyilvánosnak deklaráltuk, hogy bárki létrehozhasson location típusú objektumot, illetve hogy ki lehessen olvasni a koordinátákat.

Egy származtatott típust általában a következõképpen deklarálhatunk:

        class  D : hozzáférés-módosító B { ... };

illetve

        struct D : hozzáférés-módosító B { ... };

ahol D a származtatott (derived) osztály típusazonosítója, B pedig az alap osztály (base class) típusazonosítója. A hozzáférés-módosító vagy public, vagy private lehet; használata opcionális. Mint már említettük, class esetén a hozzáférés-módosító alapértelmezés szerint private, struct esetén pedig public. Egy származtatott osztály mezõihez való hozzáférést csak szigorítani lehet az alaptípus egyes mezõinek hozzáférési szintjeihez képest.

Egy osztályt egy másikból publikus vagy privát módon származtathatunk. Ha a hozzáférés-módosító a private, akkor az összes protected és public mezõ private lesz. Ha a hozzáférés-módosító a public, akkor a származtatott típus változás nélkül örökli az alaptípus mezõhozzáférési szintjeit. Egy származtatott típus az alaptípus minden mezõjét örökli, de azok közül csak a public és a protected mezõket használhatja korlátozás nélkül. Az alaptípus private mezõi a származtatott típusban direkt módon nem érhetõk el. A legutóbbi példában location-t és point-ot úgy deklaráltuk, hogy megfelelõ információrejtés mellett további, összetettebb osztályokat deklarálhassunk.

A hozzáférés módosítót célszerû explicit módon megadni, függetlenül egy osztályfajtára (class-ra, vagy struct-ra) vonatkozó alapértelmezéstõl.