Összehasonlító táblázat
Az összehasonlítás alapja | Magán | Védett |
---|---|---|
A származtatott osztály öröksége | A származtatott osztály nem férhet hozzá az alaposztályba tartozó magánszemélyekhez. | A származtatott osztály hozzáférhet az alaposztály által védett tagokhoz. |
Megközelíthetőség | Az osztály magántulajdonosai nem érhetők el az osztály köréből. | Az osztály védett tagjai nem érhetők el az osztályterületen kívül, kivéve az azonnali osztályt. |
Saját osztályból elérhető | Igen | Igen |
Hozzáférhető származékos osztályból | Nem | Igen |
Kívülről hozzáférhető | Nem | Nem |
A magánfogalom meghatározása
A privátnak nyilvánított osztálytagok csak az osztályon belül szerezhetők be. Más szavakkal, az osztály magánszakaszában bejelentett tagok csak az osztály barát funkciójával és tagfüggvényével érhetők el. A privát tagok közvetlenül nem szerezhetők be a származtatott osztályba, és nem érhetők el az osztályterületen kívül.
A C ++ program a privát hozzáférési specifikációk fogalmát mutatja.
#include std; A osztály {private: int i; nyilvános: void get () {cout <> i; }}; B osztály: nyilvános A {nyilvános: void show () {i ++; cout << "n Az incrementcpp"> # után beírt számod névtér std; osztály emlős {public: void mammalMethod (void) {cout << "Az emlős kategóriába tartozik." <A fenti programban a gyermekosztály egyik objektuma az „ob” névvel jön létre, és a szülőosztály tagfüggvénye a „marine_mammalMethod” gyermekosztályos módszer hívásával érhető el. Bár a szülő módszer nem érhető el közvetlenül az „ob” objektummal.
A védett definíció
Az osztályban védettnek nyilvánított osztálytagok csak az osztály tagfunkcióján és barátfunkcióján keresztül érhetők el. Ezek a védett tagok nem érhetők el az osztályterületen kívül, a gyermekosztály kivételével (azonnal abból származnak). Ez az öröklés korlátozott célját szolgálja, és korlátozott módon örökölte a tulajdonságokat.
Az alábbi megadott C ++ program illusztrálja a védett hozzáférési specifikációk fogalmát.
#include std; class account1 {protected: int x, y; // hozzáférhető a nyilvános osztályhoz: void set (int a, int b) {x = a; y = b; } void show () {cout <A fenti példában a gyermekosztály örökli az alaposztály tulajdonságait, mert az adat tagok nyilvánosak vagy védettek. Nem lenne lehetséges, ha x-t és y-t magánbázisnak nyilvánították az alaposztályban.
Kulcsfontosságú különbségek a privát és a védett C ++ között
- A védett kulcsszó olyan osztálytagok létrehozására használható, amelyek saját osztályukhoz tartoznak, de örökölhetők és felhasználhatók a származtatott osztály. Ez viszont nem lehetséges a privát használat során, mert a magánszemélyek nem örökölhetők közvetlenül a származtatott osztályra.
- Amikor az alaposztályt a privát hozzáférési specifikáció használatával örököljük, az alaposztály összes nyilvános és védett tagját, a származtatott osztály magántulajdonosait teszi. Ezzel ellentétben ez nem így van a védett hozzáférési specifikációk esetében.
Következtetés
A privát és védett hozzáférési jellemzők az osztály és a tagok láthatóságának eltérő beállítására szolgálnak. A védettség azonban rugalmasabb, mint a magán.