Поделиться через


Описатели доступа для базовых классов

Управление 2 факторов, членам базового класса в производном классе. эти же факторы контролируют доступ к унаследованным членам в производном классе.

  • Объявляет, является ли производный класс, используя базовый класс Открытый описатель доступа class-head (class-head описывается в разделе грамматики in Определение типов класса).

  • Что доступ к члену в базовом классе.

В следующей таблице показано взаимодействие между этими факторами и доступ к членам базового класса.

Доступ к членам базового класса

private

protected

Открытый

Всегда недоступна, независимо от доступа вывода

Private в производном классе если используется закрытый вывод

Private в производном классе если используется закрытый вывод

 

Protected в производном классе если используется защищенный вывод

Protected в производном классе если используется защищенный вывод

 

Protected в производном классе если используется открытый вывод

Открытый в производном классе если используется открытый вывод

Это показано в приведенном ниже примере.

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

IN DerivedClass1, функция-член PublicFunc открытый элемент и ProtectedFunc защищенному члену, поскольку BaseClass общий базовый класс.PrivateFunc закрытыми к BaseClassи труднопоступны ко всем производным классам.

IN DerivedClass2функции PublicFunc и ProtectedFunc рассмотрим закрытыми членами, поскольку BaseClass закрытый базовый класс.Сведения PrivateFunc к закрытым BaseClassи он недоступен ко всем производным классам.

Можно объявить производный класс без описателя доступа базового класса.В этом случае вывод считаются закрытыми если объявление производного класса использует класс ключевое слово.Вывод является открытым, если объявление производного класса использует struct ключевое слово.Например, следующий код:

class Derived : Base
...

эквивалентно выражению:

class Derived : private Base
...

Аналогично, в следующем коде:

struct Derived : Base
...

эквивалентно выражению:

struct Derived : public Base
...

Обратите внимание, что члены, объявленные как имеющий закрытый доступ к функциям не доступны, либо производным классам или если эти функции не объявляются с помощью классов friend объявление в базовом классе.

A union тип не может иметь базовый класс.

ПримечаниеПримечание

При указании закрытым базовым классом, желательно использовать явно private ключевое слово поэтому пользователи понимают доступ к членам производного класса.

См. также

Ссылки

Управление Участник-Доступа