Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Voprosy_24-38.docx
Скачиваний:
19
Добавлен:
11.05.2015
Размер:
127.57 Кб
Скачать

29. Дружественные классы.

Доступ к элементам класса из программы и других классов ограничен. Непосредственно обращаться к элементам класса, можно только в случае, если они определенны или описаны после ключевого слова public. Однако, в некоторых случаях, требуется определить функцию вне класса или другой класс, методы которого могут обращаться непосредственно ко всем элементам класса, включая элементы объявленные как private и protected.

В C++ для класса можно определить так называемую дружественную функцию, воспользовавшись ключевым словом friend. В классе содержится только объявление дружественной функции. Её определение расположено вне класса. Можно объявить дружественную функцию в любой секции класса – public, private или protected.

Дружественная функция не является элементом класса, но может обращаться ко всем его элементам, включая private и protected. Одна и та же функция может быть дружественной для двух или более классов.

С помощью ключевого слова friend можно объявить некоторые методы одного класса дружественными для другого класса. Такие методы могут обращаться ко всем элементам класса, даже объявленным как private и protected, несмотря на то, что сами они входят в другой класс.

По аналогии с дружественными функциями и методами, можно объявить дружественный класс. Все методы дружественного класса, могут обращаться ко всем элементам класса, включая элементы, объявленные как private и protected. Элементы другого класса (anotherClass) получают полный доступ к элементам данного класса (myClass), объявленным как private и protected, путём включения в определение данного класса описание friend:

class myClass

{

friend class anotherClass;

};

30. Наследование.

Наследование (inheritance) позволяет объявить новый (производный) класс на основе уже существующего (базового) класса, при этом, все члены базового класса становятся членами производного. Наследование отражает строгую иерархию классов ООП. На основе класса A можно определить класс B, который будет более специализированным, чем класс A. Отношение между ними таково: класс B является подмножеством класса A. Например, имея класс CAuto, можно определить класс CSportCar, явно указав только необходимые дополнительные члены, а все члены из класса CAuto переносятся автоматически, и нет необходимости указывать их заново. Наследование –один из столпов ООП. Наследование позволяет переходить от классов, обладающих общими свойствами, к более специализированным. Достаточно определить класс производным от другого (базового) класса, объявить и определить в нём новые члены и он, помимо новых, унаследует все члены базового класса. Использование производных классов позволяет строить целые иерархии классов.

Пример текста программы, использующей наследование (BaseClass -базовый класс, NewClass -производный класс):

class NewClass: public BaseClass

{

<объявления>

};

public // ключевое слово, определяющее механизм доступа к членам базового класса со стороны производного (кроме него также можно использовать ключевые слова private и protected)

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]