protected (C++)
protected:
[member-list]
protected base-class
Poznámky
Klíčové slovo protected určuje přístup k členům třídy v member-list až do dalšího specifikátoru přístupu (public nebo private) nebo do konce definice třídy.Členy třídy deklarované jako protected lze použít pouze následujícím:
Členskými funkcemi třídy, která původně deklarovala tyto členy.
Přáteli třídy, která původně deklarovala tyto členy.
Třídami odvozenými s veřejnou nebo chráněnou přístupností z této třídy, která původně deklarovala tyto členy.
Přímými soukromě odvozenými třídami, které mají také soukromý přístup k chráněným členům.
Pokud klíčové slovo protected předchází název základní třídy, určuje, že jsou veřejné a chráněné členy základní třídy chráněnými členy odvozených tříd.
Chráněné členy nejsou tak soukromé jako členy private, které jsou přístupné pouze pro členy třídy, ve které jsou deklarovány, ale nejsou veřejné jako veřejné členy, které jsou přístupné ve všech funkcích.
Chráněné členy, které jsou také deklarovány jako statické, jsou přístupné všem přátelům nebo členským funkcím odvozené třídy.Chráněné členy, které nejsou deklarovány jako statické jsou k dispozici přátelům a členským funkcím v odvozené třídě pouze prostřednictvím ukazatele, odkazu nebo objektu odvozené třídy.
Související informace naleznete v tématech friend, public, private a v tabulce přístupu ke členům v tématu Řízení přístupu ke členům třídy.
Specifické pro možnost /clr
U typů modulu CLR klíčová slova specifikátoru přístupu jazyka C++ (public, private a protected) mohou ovlivnit viditelnost typů a metod s ohledem na sestavení.Další informace naleznete v tématu Typ a viditelnost členské.
[!POZNÁMKA]
Souborů zkompilovaných pomocí možnosti /LN se toto chování netýká.V tomto případě budou všechny spravované třídy (veřejné nebo soukromé) viditelné.
Příklad
// keyword_protected.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
class X {
public:
void setProtMemb( int i ) { m_protMemb = i; }
void Display() { cout << m_protMemb << endl; }
protected:
int m_protMemb;
void Protfunc() { cout << "\nAccess allowed\n"; }
} x;
class Y : public X {
public:
void useProtfunc() { Protfunc(); }
} y;
int main() {
// x.m_protMemb; error, m_protMemb is protected
x.setProtMemb( 0 ); // OK, uses public access function
x.Display();
y.setProtMemb( 5 ); // OK, uses public access function
y.Display();
// x.Protfunc(); error, Protfunc() is protected
y.useProtfunc(); // OK, uses public access function
// in derived class
}