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

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

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





Неизвестно куда указывает указатель – на базовый класс или на производный. Чтобы узнать, на какой указывает, есть куча способов. Но их за 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; просмотров: 689. Нарушение авторских прав; Мы поможем в написании вашей работы!




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


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


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


Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

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

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

Задержки и неисправности пистолета Макарова 1.Что может произойти при стрельбе из пистолета, если загрязнятся пазы на рамке...

Шрифт зодчего Шрифт зодчего состоит из прописных (заглавных), строчных букв и цифр...

Краткая психологическая характеристика возрастных периодов.Первый критический период развития ребенка — период новорожденности Психоаналитики говорят, что это первая травма, которую переживает ребенок, и она настолько сильна, что вся последую­щая жизнь проходит под знаком этой травмы...

РЕВМАТИЧЕСКИЕ БОЛЕЗНИ Ревматические болезни(или диффузные болезни соединительно ткани(ДБСТ))— это группа заболеваний, характеризующихся первичным системным поражением соединительной ткани в связи с нарушением иммунного гомеостаза...

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