Compartir a través de


Especificadores de Access para las clases base

Control de dos factores que los miembros de una clase base están accesibles en una clase derivada; estos mismos factores controlan el acceso a los miembros heredados en la clase derivada:

  • Si la clase derivada declara la clase base mediante el especificador de acceso de Público en el clase-cabezal (el clase-cabezal se describe en la sección de la gramática de Definir tipos de clase).

  • Lo que el acceso al miembro está en la clase base.

La tabla siguiente se muestra la interacción entre estos factores y cómo determinar el acceso a miembros de clase base.

Acceso a miembros de clase base

private

protected

Public

Siempre inaccesible independientemente del acceso de derivación

Private en la clase derivada si utiliza la derivación privada

Private en la clase derivada si utiliza la derivación privada

 

Protegido en clase derivada si utiliza la derivación protegida

Protegido en clase derivada si utiliza la derivación protegida

 

Protegido en clase derivada si utiliza la derivación pública

Público en la clase derivada si utiliza la derivación pública

Esto se ilustra en el siguiente ejemplo:

// 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()
{
}

En DerivedClass1, la función PublicFunc miembro es un miembro público y ProtectedFunc es miembro protegido porque BaseClass es una clase base pública.PrivateFunc es privado a BaseClass, y es inaccesible en sus clases derivadas.

En DerivedClass2, las funciones PublicFunc y ProtectedFunc se consideran miembros privados porque BaseClass es una clase base privada.Una vez más PrivateFunc es privado a BaseClass, y es inaccesible en sus clases derivadas.

Puede declarar una clase derivada sin un especificador de acceso de la clase base.En este caso, la derivación se considera privada si la declaración de clase derivada utiliza la palabra clave de clase .La derivación se considera público si la declaración de clase derivada utiliza la palabra clave de struct .Por ejemplo, el código siguiente:

class Derived : Base
...

equivale a:

class Derived : private Base
...

De igual forma, el código siguiente:

struct Derived : Base
...

equivale a:

struct Derived : public Base
...

Observe que los miembros declarados como si tuvieran acceso privado no tienen acceso a las funciones o clases derivadas a menos que esas funciones o clases se declaran mediante la declaración de friend en la clase base.

un tipo de union no puede tener una clase base.

[!NOTA]

Al especificar una clase base privada, es aconsejable explícitamente utilizar la palabra clave de private de manera que los usuarios de la clase derivada comprender el acceso a miembros.

Vea también

Referencia

Control de Miembro-Access