Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All


protected base-class

The protected keyword specifies access to class members in the member-list up to the next access specifier (public or private) or the end of the class definition. Class members declared as protected can be used only by the following:

  • Member functions of the class that originally declared these members.
  • Friends of the class that originally declared these members.
  • Classes derived with public or protected access from the class that originally declared these members.
  • Direct privately derived classes that also have private access to protected members.

When preceding the name of a base class, the protected keyword specifies that the public and protected members of the base class are protected members of its derived classes.

Protected members are not as private as private members, which are accessible only to members of the class in which they are declared, but they are not as public as public members, which are accessible in any function.

Protected members that are also declared as static are accessible to any friend or member function of a derived class. Protected members that are not declared as static are accessible to friends and member functions in a derived class only through a pointer to, reference to, or object of the derived class.

For related information, see friend, public, private, and the member-access table in Controlling Access to Class Members.

Managed Extensions for C++ Specific

In managed applications, the C++ access specifier keywords (public, private, and protected) can affect the visibility of types and methods with regard to assemblies. For more information, see the Member Visibility and Class Visibility sections in the Managed Extensions for C++ Specification.

Note   Files compiled with /clr:noAssembly are not affected by this behavior. In this case, all managed classes (either public or private) will be visible.

END Managed Extensions for C++ Specific


// keyword_protected.cpp
// compile with: /EHsc
#include <iostream>

using namespace std;
class X
   void setProtMemb( int i ) { m_protMemb = i; }
   void Display() { cout << m_protMemb << endl; }
   int  m_protMemb;
   void Protfunc() { cout << "\nAccess allowed\n"; }
} x;

class Y : public X {
   void useProtfunc() { Protfunc(); }
} y;

int main()
   // x.m_protMemb;         error, m_protMemb is protected
   x.setProtMemb( 0 );   // OK, uses public access function
   y.setProtMemb( 5 );   // OK, uses public access function
   // x.Protfunc();         error, Protfunc() is protected
   y.useProtfunc();      // OK, uses public access function
                        // in derived class

See Also

Controlling Access to Class Members | C++ Keywords

© 2015 Microsoft