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


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать неотразимый комплимент Как противостоять манипуляциям мужчин? Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 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: 50; Нарушение авторских прав

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