protected (C++)
protected:
[member-list]
protected base-class
Заметки
Ключевое слово protected определяет доступ к членам класса в списке-членов до следующего описателя доступа (public или private) или окончания определения класса. Члены класса, объявленные как protected, могут использоваться только следующими объектами.
Функции-члены класса, который изначально объявил эти элементы.
Дружественные элементы класса, который изначально объявил эти элементы.
Классы, производные с использованием открытого или защищенного доступа от класса, который изначально объявил эти элементы.
Прямые производные с использованием закрытого доступа классы, которые также имеют закрытый доступ к защищенным элементам.
Если ключевое слово protected располагается перед именем базового класса, оно указывает, что открытые и защищенные члены базового класса являются защищенными элементами соответствующих производных классов.
Защищенные члены — не такие закрытые, как private, доступ к которым осуществляется только членами класса, в котором они объявлены, и не такие открытые, как открытые элементы, доступные в любой функции.
Защищенные члены, которые также объявлены как статические, доступны любому дружественному объекту или функции-члену производного класса. Защищенные члены, не объявленные как статические, доступны дружественным объектам и функциям-членам производного класса только через указатель или ссылку на производный класс либо объект такого производного класса.
Дополнительные сведения см. в разделах о дружественных, открытых, закрытых объектах, а также в таблице членского доступа в разделе Управление доступом к членам класса.
Специально для /clr
В CLR-типах ключевые слова описателя доступа C++ (public, private и protected) могут повлиять на видимость типов и методов с точки зрения сборок. Дополнительные сведения см. в разделе Видимость типов и членов.
Примечание
Файлы, скомпилированные с параметром /LN, не затронуты этим поведением.В этом случае все управляемые классы (открытые или закрытые) будут видны.
Пример
// 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
}