Partilhar via


Especificadores de acesso para Classes de Base

Controle de dois fatores quais membros de uma classe base podem ser acessados em uma classe derivada; Esses fatores mesmos controlam o acesso aos membros herdados na classe derivada:

  • Se a classe derivada declara a classe base usando o pública acessar o especificador na head de classe (head de classe é descrito na seção de gramática Tipos de definição de classe).

  • O que o acesso ao membro é na classe base.

A tabela a seguir mostra a interação entre esses fatores e como determinar o acesso de membro da classe base.

Acesso de membro na classe Base

Particular

Protegido

Público

Sempre inacessível, independentemente do acesso de derivação

Private na classe derivada, se você usar a derivação particular

Private na classe derivada, se você usar a derivação particular

 

Protegido na classe derivada, se você usar a derivação protegida

Protegido na classe derivada, se você usar a derivação protegida

 

Protegido na classe derivada, se você usar a derivação pública

Público na classe derivada, se você usar a derivação pública

O exemplo a seguir ilustra isso:

// access_specifiers_for_base_classes.cpp
class BaseClass
{
public:
    int PublicFunc();    // Declare a public member.
protected:
    int ProtectedFunc(); // Declare a protected member.
private:
    int PrivateFunc();   // Declare a private member.
};

// Declare two classes derived from BaseClass.
class DerivedClass1 : public BaseClass
{
};

class DerivedClass2 : private BaseClass
{
};

int main()
{
}

Na DerivedClass1, a função de membro PublicFunc é um membro público e ProtectedFunc é um membro protegido porque BaseClass é uma classe base pública.PrivateFuncé privativo de BaseClass, e ele não está acessível a qualquer classes derivadas.

Na DerivedClass2, as funções PublicFunc e ProtectedFunc são considerados membros particulares porque BaseClass é uma classe base particular.Novamente, PrivateFunc é privativo de BaseClass, e ele não está acessível a qualquer classes derivadas.

Você pode declarar uma classe derivada, sem um especificador de acesso de classe base.Nesse caso, a derivação é considerada particular se a declaração de classe derivada usa a classe palavra-chave.A derivação é considerada pública se a declaração de classe derivada usa a struct palavra-chave.Por exemplo, o código a seguir:

class Derived : Base
...

é equivalente a:

class Derived : private Base
...

Da mesma forma, o código a seguir:

struct Derived : Base
...

é equivalente a:

struct Derived : public Base
...

Observe que os membros declarados como tendo acesso particular não estão acessíveis para funções ou classes derivadas, a menos que essas funções ou classes são declaradas usando a friend declaração na classe base.

A união tipo não pode ter uma classe base.

ObservaçãoObservação

Ao especificar uma classe base particular, é aconselhável usar explicitamente a private palavra-chave para que os usuários da classe derivada compreendem o acesso de membro.

Consulte também

Referência

Controle de acesso de membro