Программирование >>  Расширенная версия языка c++ 

1 ... 102 103 104 [ 105 ] 106 107 108 ... 227


cout cout cout

cout

return

2. Функции в программе со списками только иллюстрирует работу клас-

сов. Однако для изучения динамического полиморфизма попробуйте использовать в предыдущей программе следующую функцию main():

return 0;

удаление элемента из начала списка

i = head->num;

р = head;

head = head->next;

delete p;

return i;

list *p;

демонстрация очереди

queue

p ob; указывает на очередь

p->5tOEe(l); p->store(2); p->3tore(3);

cout Очередь: ;

cout

cout p->retrieve{);

cout

cout

демонстрация стека stack s ob;

p = Ss ob; / / указывает на стек

p->store(l);

p->store(2) ; ,

p->store (3);

.... if/f

cou . Стек: ; . ill f = .



322 САмоунтепь ., , C++

int main О . - - .

list р,-

stack s ob; :

eue \ ob; *

char ch;

int i;

cout << Стек или Очередь? (С/О): ;

cin ch;

ch = tolower(ch);

if (ch= o) p = &q ob;

else p = bs ob;

p->store (i);

cou Введите К для завершения работы\п ; foi:(;;) {

cout Извлечь элемент из Стека или Очереди г1Г\

cin ch;

ch = tolower (ch) ;

if {ch==k) break; .. .......

if{ch==o) p = &q ob; .

else p = us ob; .. ...j . .,

cout p->reteieve ( ) \n; } ~

cout \n; return 0;

Функции Min() показывает, как случайные события, возникающие при выполнении программы, могут быть легко обработаны, если использовать виртуальные функции и динамический полиморфизм. В программе выполняется цикл for от 0 до 9. В течение каждой итерации предлагается выбор типа списка - стек или очередь. В соответствии с ответом, базовый указатель р устанавливается на выбранный объект (очередь или стек), и это значение запоминается. После завершения цикла начинается другой цикл, в котором предлагается выбрать список для извлечения запомненного значения. В соответствии с ответом пользователя выбирается число из указанного списка.

Несмотря на то, что этот пример достаточно прост, он позволяем нять, как полиморфизм может упростить программу, которой необходимо реагировать на случайные события. Например, операционная система Windows взаимодействует с программой посредством сообщений. Эти сообщения генерируются как и ваша программа должна как-то реагировать на каждое



Главно. Виртуальные функции 323

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

1, Добавьте список другого типа к программе из примера 1. Эта версия должна поддерживать отсортированный (в порядке возрастания) список. Назовите список sorted.

2. Обдумайте случаи, в которых следует использовать динамический полиморфизм, чтобы упростить решение разного рода проблем.

Проверка усвоения

,. материала гловы


Теперь вам необходимо выполнить следующие упражнения и ответить на вопросы.

1. Что такое виртуальная функция?

2. Какие функции не могут быть виртуальными?

3. Как виртуальнхе функции помогают реализовхвать динамический полиморфизм? Ответьте подробно.

4. Что такое чистая виртуальная функция?

5. Что такое абстрактный класс? Что такое полиморфный класс?

6. Правилен ли следующий фрагмент? Если нет, то почему?

class base { public:

virtual int f(int a) = 0; , . . . .

class derived: public base { public;

in int a, int b) ( return b; } ...

7. Наследуется ли виртуальность?

8. Поэкспериментируйте с виртуальными функциями. Это важное понятие и необходимо освоить технические приемы, связанные с ним.



1 ... 102 103 104 [ 105 ] 106 107 108 ... 227

© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика