Статья: Производные Классы

Подытоживая, можно сказать, что вместе с предоставлением средств дополнительно к имеющимся в базовом классе, производный класс можно использовать для того, чтобы сделать средства (имена) недоступными для пользователя. Другими словами, с помощью производного класса можно обеспечивать прозрачный, полупрозрачный и непрозрачный доступ к его базовому классу.

Указатели

Если производный класс derived имеет открытый базовый класс base, то указатель на derived можно присваивать переменной типа указатель на base не используя явное преобразование типа. Обратное преобразование, указателя на base в указатель на derived, должно быть явным.

Например:

class base { /* ... */ };

class derived : public base { /* ... */ };

derived m;

base* pb = &m; // неявное преобразование

derived* pd = pb; // ошибка: base* не является derived*

pd = (derived*)pb; // явное преобразование

Иначе говоря, объект производного класса при работе с ним через указатель и можно рассматривать как объект его базового класса. Обратное неверно.

Будь base закрытым базовым классом класса derived, неявное преобразование derived* в base* не делалось бы. Неявное преобразование не может в этом случае быть выполнено, потому что к открытому члкну класса base можно обращаться через указатель на base, но нельзя через указатель на derived:

class base {

int m1;

public:

int m2; // m2 - открытый член base

};

class derived : base {

// m2 НЕоткрытыйчлен derived

};

derived d;

d.m2 = 2; // ошибка: m2 из закрытой части класса

base* pb = &d; // ошибка: (закрытый base)

pb->m2 = 2; // ok

pb = (base*)&d; // ok: явное преобразование

pb->m2 = 2; // ok

Помимо всего прочего, этот пример показывает, что используя явное приведение к типу можно сломать правила защиты. Ясно, делать это не рекомендуется, и это приносит программисту заслуженную "награду". К несчастью , недисциплинированное использование явного преобразования может создать адские условия для невинных жертв, которые эксплуатируют программу, где это делается. Но, к счастью, нет способа воспользоваться приведением для получения доступа к закрытому имени m1. Закрытый член класса может использоваться только членами и друзьями этого класса.

Иерархия Типов

Производный класс сам может быть базовым классом. Например:

class employee { ... };

class secretary : employee { ... };

К-во Просмотров: 579
Бесплатно скачать Статья: Производные Классы