Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

2.2. Наследование и полиморфизм 81

Арифметический класс прогрессии

Давайте считать класс ArithProgression, показанным ниже. Мы добавляем новую членскую переменную inc, который обеспечивает стоимость, которая будет добавлена к каждому новому элементу про - gression. Мы также отвергаем членскую функцию nextValue, чтобы произвести желаемое новое поведение.

класс ArithProgression: общественная Прогрессия//арифметическая прогрессия

общественность:

ArithProgression (долго я = 1); //конструктор защитил:

виртуальный длинный nextValue (); //прогресс защитил:

длинный inc; //приращение

;

Конструктор и новая членская функция nextValue определены ниже. Заметьте, что конструктор призывает Прогрессию конструктора базового класса к ini-tialize базовый объект в дополнение к инициализации ценности inc.

ArithProgression:: ArithProgression (длинный i)

: Прогрессия (), inc (i)

длинный ArithProgression:: nextValue ()

злая собака + = я nc;

возвратите злую собаку;

//конструктор

//прогресс, добавляя

Полиморфизм работает здесь. Когда указатель Прогрессии укажет на объект ArithProgression, он будет использовать функции ArithProgression firstValue и nextValue. Даже при том, что функция printProgression не виртуальная, она использует этот полиморфизм. Его требования к firstValue и функциям nextValue неявно для «текущего» объекта, который будет иметь класс ArithProgression.

Геометрический класс прогрессии

Давайте затем определим GeomProgression, который осуществляет геометрическую прогрессию. Как с классом ArithProgression, этот новый класс наследует членские переменные сначала и злую собаку, и членские функции firstValue и printProgression из Сьона Progres-. Мы добавляем новую членскую основу переменной, которая держит основную стоимость, чтобы быть мульти - согнута, чтобы сформировать каждый новый элемент прогрессии. Конструктор инициализирует базовый класс с начальным значением 1, а не 0. Функция nextValue применяется

82 Глава 2. Ориентированный на объект дизайн

умножение, чтобы получить следующую стоимость.

класс GeomProgression: общественная Прогрессия//геометрическая прогрессия

общественность:

GeomProgression (длинный b = 2);

защищенный:

виртуальный длинный nextValue ();

защищенный:

длинная основа;

; GeomProgression:: GeomProgression (длинный b)

: Прогрессия (1), основа (b)

длинный GeomProgression:: nextValue ()

злая собака * = bas e;

возвратите злую собаку;

Класс прогрессии Фибоначчи

//конструктор

//прогресс

//основная стоимость

//конструктор

//прогресс, умножаясь

Как дальнейший пример, мы определяем класс FibonacciProgression, который представляет -

другой вид прогрессии, прогрессии Фибоначчи, где следующая стоимость - de - оштрафованный как сумма текущих и предыдущих ценностей. Мы показываем класс FibonacciPro-gression ниже. Вспомните, что каждый элемент ряда Фибоначчи - сумма предыдущих двух элементов.

Прогрессия Фибоначчи (сначала = 0, второй = 1): 0, 1, 1, 2, 3, 5, 8...

В дополнение к злой собаке текущей стоимости в базовом классе Прогрессии мы также храним здесь ценность предыдущего элемента, обозначенного предыдущий. Конструктору дают первые два элемента последовательности. Членская переменная сначала унаследована от базового класса. Мы добавляем новую членскую вторую переменную, чтобы сохранить этот второй элемент. Значения по умолчанию для первых и вторых элементов 0 и 1, соответственно.

класс FibonacciProgression: общественная Прогрессия//прогрессия Фибоначчи

общественность:

FibonacciProgression (длинный f = 0, длинный s = 1);//конструктор

защищенный:

виртуальный длинный firstValue (); //перезагружает виртуальный длинный nextValue (); //прогресс

защищенный:

долго второй; //вторая стоимость, долго предыдущая; //предыдущая стоимость

;

Процесс инициализации немного хитер, потому что мы должны создать «фиктивный» элемент, который предшествует первому элементу. Отметьте что, установив этот элемент в стоимость