next up previous contents
Elõre: Mezõhozzáférési szintek Fel: Programozás C++-ban Vissza: Destruktorok definiálása

Mezõhozzáférés

Ahogy a 2.1-es szakaszban az egységbezárás kapcsán már utaltunk rá, egy osztály egyes mezõihez való hozzáférést mi magunk is kézben tarthatjuk a C++ által nyújtott alapértelmezés felülbírálásával.

A C++-ban a struct típusú osztályokban csak részben érvényesül az egységbezárás. Nevezetesen az egység megvan, ugyanis az adatmezõk és a függvénymezõk egybe vannak forrasztva, de nincsenek elzárva a külvilágtól. Ennek oka az, hogy az alapértelmezés szerint egy struct minden mezõje publikus, a külvilágból szabadon hozzáférhetõ. A jó C++ programtervezés szem elõtt tartja az adat- vagy még inkább az információrejtést, azaz egy osztály egyes mezõit privátnak, vagy védettnek deklarálja, és ezzel egyidejûleg jól definiált, körülhatárolt "hivatalos" külsõ hozzáférést biztosít hozzájuk. Általános elvként tekinthetjük azt, hogy az adatmezõk privátak vagy védettek és a csak belsõ mûveleteket végrehajtó függvénymezõk szintén privátak, míg a külvilággal való kapcsolattartást publikus függvénymezõk biztosítják. Ezért javasoljuk a class használatát a struct helyett, hiszen a class alapértelmezés szerinti mezõhozzáférési szintjei pontosan a fenti kivánalmaknak felenek meg.

A C++-ban három, a cimkékhez formailag hasonló módon használható kulcsszó áll rendelkezésünkre, hogy a mezõhozzáférést mi magunk állíthassuk be egy osztály-definíció során. A mezõhozzáférés-szabályozás általános szintaktikája a következõ:

        hozzáférési mód : mezõlista

ahol a hozzáférési mód a public, private, vagy protected kulcsszavak egyike lehet. Például ha point-ot struct-ként deklaráljuk, célszerû az alábbi mezõhozzáférést beállítani:

 struct point {    // Ez most csak a pelda miatt struct !!!
               private:                 // Privat
                    int       x;
                    int       y;
                    colortype color;
               public:                  // Publikus
                    int       get_x(void) { return x; }
                    colortype get_color(void);              
                    point(int newx, int newy);
                  };
Egy mezõhozzáférést módosító kulcsszó hatása egy következõ hasonló kulcsszóig, vagy az õt tartalmazó blokkzáró kapcsos zárójelig tart.