Определение производного класса

   
На этом шаге мы рассмотрим правила определения производного класса.

В определении и описании производного класса приводится список базовых классов, из которых он непосредственно
наследует данные и методы. Между именем вводимого (нового) класса и списком базовых классов помещается
двоеточие. Например, при таком определении

class  S:   X,   Y,   Z   {    ...   } ;

класс S порожден классами X, Y, Z, откуда он наследует компоненты. Наследование компонента не
выполняется, если его имя будет использовано в качестве имени компонента в определении производного класса
S. Как уже говорилось, по умолчанию из базовых классов наследуются методы и данные со спецификаторами
доступа - public (общедоступные) и protected (защищенные).

   
В порожденном классе эти унаследованные компоненты получают статус доступа private, если новый класс
определен с помощью ключевого слова class, и статус доступа public, если новый класс определен
как структура, т.е. с помощью ключевого слова struct.

   
Таким образом, при определении класса

struct J: X, Z { ... };

любые наследуемые компоненты классов X, Z будут иметь в классе J статус общедоступных
(public).

   
Пример:

class В   {  
         protected:   
              int  t; 
         public:   
              char u;
 };
class E: В { ... };  // t, u наследуются как private.
struct S: В { ... }; // t, u наследуются как public.

   
Явно изменить умалчиваемый статус доступа при наследовании можно с помощью спецификаторов доступа:

  • private,
  • protected и
  • public.

   
Эти спецификаторы доступа указываются в описании производного класса непосредственно перед
нужными именами базовых классов. Учитывая определение класса B, можно ввести следующие
производные классы:

class M: protected В { ... }; // t, u наследуются как protected.
class P: public В { ... }; //t - protected, u - public.
class D: private В { ... }; //t, u наследуются как private.
struct F: private В {...}; //t, u наследуются как private.
struct G: public В { ... };//t - protected, u - public.

   
Соглашения о статусах доступа при разных сочетаниях базового и производного классов иллюстрирует таблица 1.

Таблица 1. Статусы доступа при наследовании

Доступ в базовом классеСпецификатор доступа перед базовым классом

Доступ в производном классе

struct class
publicотсутствуетpublicprivate
protectedотсутствуетpublicprivate
privateотсутствуетнедоступнынедоступны
publicpublicpublicpublic
protectedpublicprotectedprotected
privatepublicнедоступнынедоступны
publicprotectedprotectedprotected
protectedprotectedprotectedprotected
privateprotectedнедоступнынедоступны
publicprivateprivateprivate
protectedprivateprivateprivate
privateprivateнедоступнынедоступны

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

   
На следующем шаге мы приведем пример определения производного класса.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий