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

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

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






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



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

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

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

Постинъекционные осложнения, оказать необходимую помощь пациенту I.ОСЛОЖНЕНИЕ: Инфильтрат (уплотнение). II.ПРИЗНАКИ ОСЛОЖНЕНИЯ: Уплотнение...

Приготовление дезинфицирующего рабочего раствора хлорамина Задача: рассчитать необходимое количество порошка хлорамина для приготовления 5-ти литров 3% раствора...

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

Особенности массовой коммуникации Развитие средств связи и информации привело к возникновению явления массовой коммуникации...

Тема: Изучение приспособленности организмов к среде обитания Цель:выяснить механизм образования приспособлений к среде обитания и их относительный характер, сделать вывод о том, что приспособленность – результат действия естественного отбора...

Тема: Изучение фенотипов местных сортов растений Цель: расширить знания о задачах современной селекции. Оборудование:пакетики семян различных сортов томатов...

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