Студопедия — Укажите особенности использования указателей базового класса для производного класса
Студопедия Главная Случайная страница Обратная связь

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

Укажите особенности использования указателей базового класса для производного класса






Неизвестно куда указывает указатель – на базовый класс или на производный. Чтобы узнать, на какой указывает, есть куча способов. Но их за 5 минут не расскажешь. Если указатель указывает на производный класс, а не на базовый и в этих классах есть виртуальный метод, то при вызове его для указателя вызовется именно тот, который описан в производном классе.

 

113. Зачем виртуализируются методы класса?

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

Пример:

class Base

{ public:

virtual void show() //виртуальная функция

{ cout << “Base\n”; }

};

class Derv1: public Base // Производный класс 1

{ public:

void show()

{ cout << “Derv1\n”; }

};

class Derv2: public Base // Производный класс 2

{ public:

void show()

{ cout << “Derv2\n”; }

};

int main()

{ Derv1 dv1; // Объект производного класса 1

Derv2 dv2; // Объект производного класса 2

Base* ptr; // Указатель на базовый класс

ptr = &dv1; //Адрес dv1 занести в указатель

ptr -> show() // Выполнить show()

ptr = &dv2; //Адрес dv2 занести в указатель

ptr -> show()// Выполнить show()

return 0; }

Итог программы: Derv1

Derv2

Следовательно, выполняются методы производных классов, а не базового.

 

114. Определите понятие «абстрактный класс». Определите понятие «чистый виртуальный метод».

Абстрактный класс – это базовый класс, объекты которого никогда не будут реализованы. Такой класс может существовать с единственной целью – быть родительским по отношению к производным классам, объекты которых будут реализованы.

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

Такие классы содержат виртуальные функции, которые замещаются в потомках. Если объявить функцию вот так:

virtual void Show() = 0; то это будет чисто виртуальная функция. Если класс содерижт хотя бы одну такую чисто виртуальную функцию, то

компилятор считает такой класс абстрактным и запрещает создание объекта такого класса.

115. Опишите понятие «множественное наследование». Какие проблемы возникают при множествен-ном наследовании?

Множетсвенно наследование – это когда класс может быть производным не только от одного базового класса, а и от многих.

Пример:

class A{};

class B {};

class C: public A, public B

{};

Проблемы: (стр.397)

1) У обоих предков могут оказаться одинаковые имена

2) Если предки класса сами являются потомками одного класса, то может возникнуть неоднозначность

 







Дата добавления: 2015-04-19; просмотров: 659. Нарушение авторских прав; Мы поможем в написании вашей работы!



Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

Вычисление основной дактилоскопической формулы Вычислением основной дактоформулы обычно занимается следователь. Для этого все десять пальцев разбиваются на пять пар...

Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

Патристика и схоластика как этап в средневековой философии Основной задачей теологии является толкование Священного писания, доказательство существования Бога и формулировка догматов Церкви...

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

Вопрос 1. Коллективные средства защиты: вентиляция, освещение, защита от шума и вибрации Коллективные средства защиты: вентиляция, освещение, защита от шума и вибрации К коллективным средствам защиты относятся: вентиляция, отопление, освещение, защита от шума и вибрации...

Дренирование желчных протоков Показаниями к дренированию желчных протоков являются декомпрессия на фоне внутрипротоковой гипертензии, интраоперационная холангиография, контроль за динамикой восстановления пассажа желчи в 12-перстную кишку...

Деятельность сестер милосердия общин Красного Креста ярко проявилась в период Тритоны – интервалы, в которых содержится три тона. К тритонам относятся увеличенная кварта (ув.4) и уменьшенная квинта (ум.5). Их можно построить на ступенях натурального и гармонического мажора и минора.  ...

Понятие о синдроме нарушения бронхиальной проходимости и его клинические проявления Синдром нарушения бронхиальной проходимости (бронхообструктивный синдром) – это патологическое состояние...

Studopedia.info - Студопедия - 2014-2024 год . (0.008 сек.) русская версия | украинская версия