web-dev-qa-db-fra.com

Classes C ++ (publiques, privées et protégées)

Comment les classes en C++ peuvent-elles être déclarées public, private ou protected?

38
Simplicity

En C++, il n'y a aucune notion d'une classe entière ayant un spécificateur d'accès comme il en existe en Java ou C #. Si un morceau de code a la visibilité d'une classe, il peut référencer le nom de cette classe et la manipuler. Cela dit, il y a quelques restrictions à cela. Ce n'est pas parce que vous pouvez référencer une classe que vous pouvez l'instancier, car le constructeur peut être marqué comme privé. De même, si la classe est une classe imbriquée déclarée dans la section privée ou protégée d'une autre classe, alors la classe ne sera pas accessible en dehors de cette classe et de ses amis.

42
templatetypedef

En imbriquant une classe dans une autre:

class A
{
public:
    class B {};
protected:
    class C {};
private:
    class D {};
};
29
Benjamin Lindley

Cela dépend si vous parlez de membres ou d'héritage. Vous ne pouvez pas avoir un 'private class', En tant que tel.

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

Ou héritage:

class Foo : public Bar
class Foo : protected Bar
class Foo : private Bar
6
The Communist Duck

Vous pouvez implémenter des "classes privées" en ne publiant simplement pas leur interface aux clients.

Je ne connais aucun moyen de créer des "classes protégées".

4
Edward Strange