protected (C++)
Синтаксис
protected:
[member-list]
protected base-class
Замечания
Ключевое слово protected
указывает доступ к членам класса в списке членов до следующего описателя доступа (public
или) или private
конца определения класса. Члены класса, объявленные как protected
можно использовать только следующим образом:
Функции-члены класса, который изначально объявил эти элементы.
Дружественные элементы класса, который изначально объявил эти элементы.
Классы, производные с использованием открытого или защищенного доступа от класса, который изначально объявил эти элементы.
Прямые производные с использованием закрытого доступа классы, которые также имеют закрытый доступ к защищенным элементам.
При выполнении имени базового класса ключевое слово указывает, что общедоступные и защищенные члены базового класса protected
защищены членами производных классов.
Защищенные члены не так закрыты private
, как члены, которые доступны только членам класса, в котором они объявлены, но они не как открытые public
, как члены, которые доступны в любой функции.
Защищенные члены, которые также объявлены static
как доступны любому другому или члену функции производного класса. Защищенные члены, которые не объявлены как static
доступны для друзей и функций-членов в производном классе только через указатель на, ссылку на или объект производного класса.
Дополнительные сведения см. в таблице "Друг", "Общедоступный", "Частный" и "Доступ к членам" в разделе "Управление доступом к членам класса".
Специально для /clr
В типах СРЕДЫ CLR описатель доступа C++ ключевое слово (public
, private
иprotected
) может повлиять на видимость типов и методов в отношении сборок. Дополнительные сведения см. в разделе "Члены контроль доступа".
Примечание.
Файлы, скомпилированные с помощью /LN , не влияют на это поведение. В этом случае все управляемые классы (открытые или закрытые) будут видны.
КОНЕЦ специально для /clr
Пример
// 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 the derived class
}
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по