Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Виды порождения классов





В иерархии классов соглашение относительно доступности компонентов класса следующее:

Вид порождения Доступ в базовом классе Доступ в порожденном классе
public public protected private public protected private
protected public protected private protected protected private
private public protected private private private private

private член класса может использоваться только функциями - членами и функциями - "друзьями'' данного класса. В производном классе он недоступен.

protected - то же, что и private, но дополнительно член класса с данным атрибутом доступа может использоваться функциями-членами и функциями - "друзьями" классов, производных отданного.

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

Допускается множественное наследование, т. е. возможность для некоторого класса наследовать компоненты нескольких никак не связанных между собой базовых классов.

Пример.

class B1 {...};

class B2 {...};

class B3 {...};

class B4: public B1, protected B2, private B3

{...};

Стандартные преобразования при порождении.

Так как порожденный класс получен из базового, то есть содержит в себе базовую часть, то между порожденным и базовым классом возможны неявные преобразования:

- объект порожденного класса неявно преобразуется к объекту базового класса;

- ссылка на порожденный класс неявно преобразуемся к ссылке на базовый класс;

- указатель на порожденный класс неявно преобразуется к указателю на базовый класс.

Пример.

Рассмотрим иерархию порождений:

class Device {...};

class Display: public Device {...};

class Keyboard: public Device {...};

class Mouse: public Device {...};

Определим класс Event, не имеющий отношения к данной иерархии:

class Event {...};

Пусть есть внешняя функция:

extern void f(Device &);

тогда для объектов вышеописанных классов:

Device dev;

Display disp;

Keyboard keyb;

Mouse ms;

Event ev;

Функция будет работать следующим образом:

f(dev); // правильно

f(ms); // правильно, т.к. ссылка на Mouse,

f(keyb); // Keyboard, Display неявно

f(disp); // преобразуется к ссылке на Device

f(ev); // Ошибка: для класса Event класс Device

// не является базовым, поэтому

// преобразования не происходит.

Date: 2016-05-13; view: 424; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию