2011-01-31 3 views
29

Как можно объявить классы на C++ public, private, или protected?Классы C++ (общедоступные, частные и защищенные)

+1

Как и в, вы хотите, чтобы кто-то не мог использовать класс? Класс может быть подклассифицирован: т. Е. Класс A {private: class B {}; }; –

+0

Это может быть полезно для вас: http://www.linuxquestions.org/questions/programming-9/public-private-protected-c-215399/#post1098220 – KyleWpppd

+0

Почему есть близкое голосование за этот вопрос? Это кажется вполне разумным вопросом. – templatetypedef

ответ

36

В C++ нет понятия целого класса, имеющий спецификатор доступа таким образом, что есть в Java или C#. Если кусок кода имеет видимость класса, он может ссылаться на имя этого класса и манипулировать им. Тем не менее, на это есть несколько ограничений. Просто потому, что вы можете ссылаться на класс, это не значит, что вы можете его создать, например, поскольку конструктор может быть помечен как частный. Аналогично, если класс является вложенным классом, объявленным в частном или защищенном разделе другого класса, класс не будет доступен вне этого класса и его друзей.

5

Это зависит от того, имеете ли вы значение членов или наследование. У вас не может быть 'private class', как таковой.

class Foo 
{ 
public: 
Foo() {} //public ctr 
protected: 
void Baz() //protected function 
private: 
void Bar() {} //private function 
} 

Или наследования:

class Foo : public Bar 
class Foo : protected Bar 
class Foo : private Bar 
22

К гнездованию один класс внутри другого:

class A 
{ 
public: 
    class B {}; 
protected: 
    class C {}; 
private: 
    class D {}; 
}; 
4

Вы можете реализовать «частные классы», просто не публикуя свой интерфейс для клиентов.

Я не знаю, как создать «защищенные классы».

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