2014-10-07 4 views
-1

Учитывая следующий код:Почему объект недоступен, если он защищен доступом?

class A { 
public: 
    int y; 
    A(){ 
    int x = 10; 
    cout << x << endl; 
    } 
} a; 

Там нет никаких проблем. Объявлен объект, a. Но, со следующим кодом:

class A { 
public: 
    int y; 
protected: 
    A(){ 
    int x = 10; 
    cout << x << endl; 
    } 
} a; 

Создание объекта a не представляется возможным, а код не будет компилироваться. Может ли кто-нибудь объяснить мне, почему к нему нельзя получить доступ, несмотря на защищенный модификатор доступа? Что мне не хватает? Спасибо.

+2

«объект находится внутри класса» - нет, это не так, оно находится в пространстве имен вне класса и поэтому не может получить доступ к защищенному конструктору. –

ответ

0

Защищенный идентификатор доступа ограничивает доступ к функциям-членам того же класса или классов производных классов. Другими словами, спецификатор защищенного доступа позволяет производным классам напрямую обращаться к членам базового класса, не подвергая эти члены публике. Защищенное наследование аналогично частному наследованию. Однако классы, полученные из производного класса, по-прежнему имеют доступ к публичным и защищенным членам напрямую. Общественность (материал вне класса) не делает.

Смежные вопросы