Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпора к КПИЯП.docx
Скачиваний:
43
Добавлен:
25.02.2016
Размер:
135.65 Кб
Скачать

2.4 Наследование

    Рассмотрим как можно определить наследование одного класса другим в С++:

 

class имя_производного_класса : атрибут_наследования имя_базового класса {...};

 

Атрибут наследования определяется тремя известными ключевыми словами: private, public and protected., которые использовались для доступа к внутренним компонентам классов. Данный атрибут при наследовании определяет видимость компонент базового класса внутри производного.

1. public - открытый (общий). Доступ к элементам класса может быть осуществлен из самого класса так и извне класса. Все переменные или функции объявленные после ключевого слова public, являются публичными, т.е. доступными для всех других функций в программе.

2. private - закрытый (частный). Доступ к элементам класса может быть осуществлен только из функций самого класса.

3. protected – защищенный, разрешен функциям класса, которые являются друзьями класса.

 

По умолчанию все элементы класса имеют атрибут доступа private. Атрибут задается ключевым словом и символом (:). Действие атрибута сохраняется до следующего атрибута или до закрывающей фигурной скобки в объявлении класса.

 

class С

{

   int X;

   public:

   int function();

   private:

   int Y;

};

 

Рассмотрим как атрибут наследования влияет на видимость компонент базового класса.

Рисунок 12.1 - Влияние атрибутов на видимость компонент

 

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

Спецификатор наследования

Public

protected

Private

Public

Public

protected

Private

Protected

Protected

protected

Private     

Private

нет доступа

нет доступа

нет доступа

 

Спецификатор наследования определяет то, как  элементы базового класса наследуются производным классом.

Если publicто все открытые члены базового классаостаются открытыми в производном. Если закрытый, то все открытые члены базового класса в производном становятся закрытыми. Закрытые остаются закрытыми и не доступными. Важно понимать, хотя открытые члены базового класса становятся закрытыми в производном, они остаются доступными для функций – членов производного класса.

Атрибут наследования protected эквивалентен private, только за одним исключением - все компоненты базового класса с атрибутом доступа protected, доступны для членов всех  производных классов этого базового класса. Вне базового или производных классов защищенные члены не доступны. Разница между private и protected проявляется только при наследовании классов.

Для доступа к элементам класса используется символ (.) или символы (->) если используется не имя объекта а указатель.

 

Cobj;

obj.X; obj.Y; //неправильно!!!

int n=obj.function;

 

или

 

C *obj;

obj->X; obj->Y;

int n=obj->function;

 

Оператор :: называется оператором разрешения области видимости и служит той же цели, что и оператор точка. Оператор разрешения области видимости используется с именем класса, в то время как оператор точка используется с именем объекта.

 

Базовый класс может наследоваться производным классом как защищенный. В этом случае открытые и защищенные члены базового класса становятся защищенными членами производного класса. Закрытые члены базового класса остаются закрытыми.Технически атрибут наследования не обязателен. Если он не указан и производный класс определен с ключевым словом class, то базовый класс по умолчанию наследуется как закрытый. Тем не менее для ясности предпочтительно явное задание атрибута доступа.