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

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

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






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



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

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...

Логические цифровые микросхемы Более сложные элементы цифровой схемотехники (триггеры, мультиплексоры, декодеры и т.д.) не имеют...

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

Тема 2: Анатомо-топографическое строение полостей зубов верхней и нижней челюстей. Полость зуба — это сложная система разветвлений, имеющая разнообразную конфигурацию...

Виды и жанры театрализованных представлений   Проживание бронируется и оплачивается слушателями самостоятельно...

Билет №7 (1 вопрос) Язык как средство общения и форма существования национальной культуры. Русский литературный язык как нормированная и обработанная форма общенародного языка Важнейшая функция языка - коммуникативная функция, т.е. функция общения Язык представлен в двух своих разновидностях...

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

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

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