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

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

/ ** Тестовая программа для классов прогрессии */

международное основное ()

Прогрессия* прогр;

//тест ArithProgression

единое время co <<«r i t h m e t i c p r o g r e s s i o n w i t h d e f u l t i n c r e m e n t: \n»; прогр = новый ArithProgression ();

прогр-> printProgression (10);

единое время co <<«r i t h m e t i c p r o g r e s s i o n w i t h i n c r e m e n t 5: \n»;

прогр = новый ArithProgression (5);

прогр-> printProgression (10);

//тест GeomProgression

единое время co <<«G e o m e t r i c p r o g r e s s i o n w i t h d e f u l t b s e: \n»; прогр = новый GeomProgression ();

прогр-> printProgression (10);

единое время co <<«G e o m e t r i c p r o g r e s s i o n w i t h b s e 3: \n»;

прогр = новый GeomProgression (3);

прогр-> printProgression (10);

//тест FibonacciProgression

единое время co <<«F i b o n c c i p r o g r e s s i o n w i t h d e f u l t s t r t v l u e s: \n»; прогр = новый FibonacciProgression ();

прогр-> printProgression (10);

единое время co <<«F i b o n c c i p r o g r e s s i o n w i t h s t r t v l u e s 4 n d 6: \n»;

прогр = новый FibonacciProgression (4, 6);

прогр-> printProgression (10);

возвратите ВЫХОДНОЙ УСПЕХ; //успешное выполнение

Кодовый Фрагмент 2.1: Программа для тестирования классов прогрессии.

Арифметическая прогрессия с приращением по умолчанию: 0 123 456 789 Арифметических прогрессий с приращением 5: 0 5 10 15 20 25 30 35 40 45 Геометрических прогрессий с основой по умолчанию: 1 2 4 8 16 32 64 128 256 512 Геометрических прогрессий с основой 3: 1 3 9 27 81 243 729 2187 6561 19 683 прогрессии Фибоначчи с неплатежом начинают ценности: 0 1 1 2 3 5 8 13 21 34 прогрессии Фибоначчи с началом оценивают 4 и 6: 4 6 10 16 26 42 68 110 178 288

Кодовый Фрагмент 2.2: Продукция программы TestProgression от Кодового Фрагмента 2.1.

86

Глава 2. Ориентированный на объект Дизайн C ++ поддерживает два других типа наследования. Эти различные типы наследования уменьшают права доступа для участников базового класса. В защищенном наследовании области, которые, как объявляют, были общественными в базовом классе, становятся защищенными в детском классе. В частном наследовании области объявили, чтобы быть общественными и защищенными в базовом классе, становятся частными в производном классе. Пример показывают ниже.

Основа класса

защищенный:

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

;

интервал foo; международный бар;

/ / bas e статья как s

класс Derive1: общественная Основа //общественное наследование

//foo защищен, и бар общественный

;

класс Derive2: защищенная Основа

//и foo и бар защищены

;

//защищенное наследование

класс Derive3: частная Основа

//и foo и бар частные

;

//общественное наследование

Защищенное и частное наследование не используется так же часто как общественное наследование. Мы только используем общественное наследование в этой книге.

Кастинг в иерархии наследования

Переменная объекта может быть рассмотрена как имеющий различные типы, но это может быть объявлено

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

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

Человек* стр [100]; стр [0] = новый Человек (...); стр [1] = новый Студент (...);//...

стр [1]-> changeMajor («английский язык»);

//множество 100 указателей Человека//добавляет, что Человек (опущенные детали)//добавляет Студента (опущенные детали)

//ОШИБКА!