Wykres porównania
Podstawa do porównania | Prywatny | Chroniony |
---|---|---|
Dziedziczenie właściwości do klasy pochodnej | Klasa pochodna nie może uzyskać dostępu do prywatnych członków klasy podstawowej. | Klasa pochodna może uzyskać dostęp do chronionych członków klasy podstawowej. |
Dostępność | Prywatni członkowie klasy są niedostępni z zakresu klasy. | Chronieni członkowie klasy są niedostępni poza zasięgiem klasy, z wyjątkiem klasy pochodnej natychmiast. |
Dostępne z własnej klasy | tak | tak |
Dostępne z klasy pochodnej | Nie | tak |
Dostępne z zewnątrz | Nie | Nie |
Definicja prywatności
Członkowie klasy zadeklarowani jako prywatni mogą zostać odzyskani tylko w klasie. Innymi słowy, członkowie zadeklarowani w prywatnej sekcji klasy mogą uzyskać dostęp tylko przez funkcję friend i funkcję członka klasy. Prywatni członkowie nie mogą uzyskać bezpośrednio klasy pochodnej i są niedostępni poza zakresem klasy.
Program C ++ pokazuje koncepcję prywatnych specyfikatorów dostępu.
#include using namespace std; class A {private: int i; public: void get () {cout <> i; }}; klasa B: publiczna A {public: void show () {i ++; cout << "\ n Twój wpis po incrementcpp"> # include using namespace std; klasa ssak {public: void mammalMethod (void) {cout << "Pochodzi pod kategorią ssaków." <W podanym wyżej programie jeden obiekt klasy potomnej jest tworzony z nazwą "ob", a funkcja członkowska klasy nadrzędnej jest dostępna poprzez wywołanie metody klasy potomnej "marine_mammalMethod". Mimo, że metoda macierzysta nie może być dostępna bezpośrednio z obiektem "ob".
Definicja chroniona
Członkowie klasy zadeklarowani jako chronieni w klasie mogą być dostępni jedynie poprzez funkcję członka i funkcję przyjaciela klasy. Tych chronionych członków nie można uzyskać poza zasięgiem klasy, za wyjątkiem klasy potomnej (od niej bezpośrednio pochodzącej). Służy ograniczonemu celowi dziedziczenia i dziedziczy właściwości w ograniczony sposób.
Poniższy program C ++ ilustruje pojęcie chronionych specyfikacji dostępu.
#include using namespace std; class account1 {protected: int x, y; // dostępne dla klasy pochodnej public: void set (int a, int b) {x = a; y = b; } void show () {cout <W powyższym przykładzie klasa podrzędna dziedziczy właściwości klasy bazowej, ponieważ elementy danych są zadeklarowane jako publiczne lub chronione. Nie byłoby możliwe, gdyby x i y zostały zadeklarowane jako prywatne w klasie bazowej.
Kluczowe różnice między prywatnymi i chronionymi w C ++
- Chronione słowo kluczowe może być używane do tworzenia elementów klas, które są prywatne dla ich klasy, ale mogą być dziedziczone i używane przez klasę pochodną. I odwrotnie, nie jest to możliwe podczas używania prywatnego, ponieważ członkowie prywatni nie mogą być dziedziczeni bezpośrednio do klasy pochodnej.
- Kiedy klasa bazowa jest dziedziczona przy użyciu specyfikatora dostępu prywatnego, tworzy wszystkich publicznych i chronionych członków klasy bazowej, prywatnych członków klasy pochodnej. W przeciwieństwie do tego nie ma to miejsca w przypadku chronionych specyfikacji dostępu.
Wniosek
Prywatne i chronione to specyfikatory dostępu, które służą do ustawiania widoczności klasy i jej członków w różny sposób. Jednak ochrona jest bardziej elastyczna niż prywatna.