Задания для самостоятельной работы
При выполнении задания к данной лабораторной работе необходимо написать программу, демонстрирующую работу наследования согласно варианту задания.
Варианты лабораторных заданий.
Вариант 1
Создать базовый класс Car (машина), характеризуемый торговой маркой (строка), числом цилиндров, мощностью. Определить методы переназначения и изменения мощности. Создать производный класс Lorry (грузовик), характеризуемый также грузоподъемностью кузова. Определить функции переназначения марки и изменения грузоподъемности.
Вариант 2
Создать класс Pair (пара чисел); определить методы изменения полей и сравнения пар: пара p1 больше пары р2, если (first.pl > first.р2) или (first.pl > first.р2) и (second.pl > second.р2). Определить класс−наследник Fraction с полями: целая часть числа и дробная часть числа. Определить полный набор методов сравнения.
Вариант 3
Создать класс Liquid (жидкость), имеющий поля названия и плотности. Определить методы переназначения и изменения плотности. Создать производный класс Alcohol (спирт), имеющий крепость. Определить методы переназначения и изменения крепости.
Вариант 4
Создать класс Pair (пара чисел); определить методы изменения полей и вычисления произведения чисел. Определить производный класс Rectangle (прямоугольник) с полями−сторонами. Определить методы вычисления периметра и площади прямоугольника.
Вариант 5
Создать класс Man (человек), с полями: имя, возраст, пол и вес. Определить методы переназначения имени, изменения возраста и изменения веса. Создать производный класс Student, имеющий поле года обучения. Определить методы переназначения и увеличения года обучения.
Вариант 6
Создать класс Triad (тройка чисел); определить методы изменения полей и вычисления суммы чисел. Определить производный класс Triangle с полями−сторонами. Определить методы вычисления углов и площади треугольника.
Вариант 7
Создать класс Triangle с полями−сторонами. Определить методы изменения сторон, вычисления углов, вычисления периметра. Создать производный класс Equilateral (равносторонний), имеющий поле площади. Определить метод вычисления площади.
Вариант 8
Создать класс Triangle с полями−сторонами. Определить методы изменения сторон, вычисления углов, вычисления периметра. Создать производный класс RightAngled (прямоугольный), имеющий поле площади. Определить метод вычисления площади.
Вариант 9
Создать класс Pair (пара чисел); определить методы изменения полей и вычисления произведения чисел. Определить производный класс RightAngled с полями−катетами. Определить методы вычисления гипотенузы и площади треугольника.
Вариант 10
Создать класс Triad (тройка чисел); определить метод сравнения триад. Определить производный класс Date с полями: год, месяц и день. Определить полный набор методов сравнения дат.
Вариант 11
Создать класс Triad (тройка чисел); определить метод сравнения триад. Определить производный класс Time с полями: час, минута и секунда. Определить полный набор методов сравнения моментов времени.
Вариант 12
Реализовать класс−оболочку Number для числового типа float. Реализовать методы сложения и деления. Создать производный класс Real, в котором реализовать метод возведения в произвольную степень, и метод для вычисления логарифма числа.
Вариант 13
Создать класс Triad (тройка чисел); определить методы увеличения полей на 1. Определить производный класс Date с полями: год, месяц и день. Переопределить методы увеличения полей на 1 и определить метод увеличения даты на п дней.
Вариант 14
Реализовать класс−оболочку Number для числового типа double. Реализовать методы умножения и вычитания. Создать производный класс Real, в котором реализовать метод, вычисляющий корень произвольной степени, и метод для вычисления числа π в данной степени.
Вариант 15
Создать класс Triad (тройка чисел); определить методы увеличения полей на 1. Определить класс−наследник Time с данными−член: час, минута, секунда. Переопределить методы увеличения полей на 1 и определить методы увеличения на п секунд и минут.
Вариант 16
Создать базовый класс Pair (пара целых чисел) с операциями проверки на равенство и перемножения полей. Реализовать операцию вычитания пар по формуле (а, b) − (с, d) = (а − b, с − d). Создать производный класс Rational; определить новые операции сложения (a, b) + (c,d) = (ad + bd, bd) и деления (a,b) / (с,d) = (a/d, b/d); переопределить операцию вычитания (а,b) − (c,d) = (a − b,c − d).
Вариант 17
Создать класс Pair (пара чисел); определить метод перемножения полей и операцию сложения пар (а, b) + (с, d) = (а + b, с + d). Определить производный класс Complex с полями: действительная и мнимая части числа. Определить методы умножения (a, b) ×(c,d) = (ас × bd, ad × be)и вычитания (а,b) − (c,d) = (a − b,c − d).
Вариант 18
Создать класс Pair (пара целых чисел); определить методы изменения полей и операцию сложения пар (а, b) + (с, d) = (а + b, с + d).Определить класс−наследник Long с полями: старшая часть числа и младшая часть числа. Переопределить операцию сложения и определить методы умножения и вычитания.
Вариант 19
Создать базовый класс Triad (тройка чисел) с операциями сложения с числом, умножения на число, проверки на равенство. Создать производный класс vector3D, задаваемый тройкой координат. Должны быть реализованы: операция сложения векторов, скалярное произведение векторов.
Вариант 20
Создать класс Pair (пара целых чисел); определить метод умножения на число и операцию сложения пар (а, b) + (с, d) = (а + b, с + d). Определить класс−наследник Money с полями: рубли и копейки. Переопределить операцию сложения и определить методы вычитания и деления денежных сумм.
Контрольные вопросы:
1. Дайте определение понятию виртуальная функция?
2. Что такое чистая виртуальная функция? Если в объявлении класса имеется чистая виртуальная функция, как называется такой класс и какие ограничения налагаются на его использование?
3. Как создать виртуальный конструктор−копировщик?
4. Как вызвать функцию базового класса из объекта производного класса, если в производном классе эта функция была замешена?
5. Как вызвать функцию базового класса из объекта производного класса, если в производном классе эта функция не была замешена?
6. Если в базовом классе функция объявлена как виртуальная, а в производном классе виртуальность функции указана не была, сохранится ли функция как виртуальная в следующем произведенном классе?
7. С какой целью используется ключевое слово protected?
8. Динамический полиморфизм достигается посредством использования _ функций и указателей _ класса. (Вставьте пропущенные слова.)
9. Если при наличии иерархии классов в производном классе опушена перегрузка (не чистой) виртуальной функции, что происходит, когда объект этого производного класса вызывает такую функцию?
10. Что производный класс наследует из базового класса?
11. Что производный класс не наследует из базового класса?
12. В каком порядке вызываются конструкторы и деструкторы класса при создании и удалении объекта производного класса?
13. Требуются ли конструкторы производному классу, если он не добавляет к базовому классу элементы данных?
14. Почему лучше передавать объект по ссылке, а не по значению?
Дата добавления: 2015-07-30; просмотров: 2450;