|
Программирование >> Структурное программирование
Ответы на упражнения для самопроверки 6.1. а) struct, b) точка (.), стрелка (->). с) private, d) Конструктор. e)pri-vate. f) записи set . g) Поэлементное копирование по умолчанию (с помощью операции присваивания), h) открытого, закрытого, i) чтения get . j) интерфейс, к) инкапсулирована. 1) class, struct, m) public. 6.2. a) Ошибка: Деструкторы не могут возвращать значения или принимать аргументы. Исправление: переместите тип void возвращаемого значения и параметр int из определения. b) Ошибка: элементы не могут явно получать начальные значения в определении класса. Исправление: уберите явное задание начальных значений из определения класса и задавайте начальные значения элементов в конструкторе. c) Ошибка: конструкторы не могут возвращать значения. Исправление: переместите тип int возвращаемого значения из объявления. Упражнения 6.3. Каково назначение операции разрешения области действия? 6.4. Сравните и сопоставьте нотацию struct и class в С-Н-. 6.5. Создайте конструктор, способный использовать текущее время, даваемое функцией time(), объявленной в заголовочном файле time.h стандартной библиотеки С, чтобы задавать начальные значения объекту класса Time. 6.6. Создайте класс с именем Complex для выполнения арифметических действий с комплексными числами. Напишите программу драйвера для проверки вашего класса. Комплексные числа имеют форму realPart + imaginaryPart *j где i - квадратный корень из -1. Используйте переменные с плавающей запятой для представления закрытых данных этого класса. Создайте функцию конструктор, которая позволяет объекту этого класса принимать начальные значения при его объявлении. Создайте открытые функции-элементы для каждого из следующих пунктов: a) Сложение двух комплексных чисел: отдельно складываются действительные и мнимые части. b) Вычитание двух комплексных чисел: действительная часть правого операнда вычитается из действительной части левого операнда, а мнимая часть правого операнда вычитается из мнимой части левого операнда. c) Печать комплексных чисел в форме (а, Ь), где а - действительная часть, а b - мнимая часть. i Глава 6 6.7. Создайте класс по имени Rational для выполнения арифметических действий с дробями. Напишите программу драйвера для проверки вашего класса. Используйте целые переменные для представления закрытых данных класса - числителя и знаменателя. Создайте функцию конструктор, которая позволяет объекту этого класса принимать начальные значения при его объявлении. Конструктор должен содержать значения по умолчанию на случай отсутствия заданных начальных значений и должен хранить дроби в сокращенном виде (т.е. дробь 2/4 должна храниться в объекте как 1 в числителе и 2 в знаменателе). Создайте открытые функции-элементы для каждого из следующих случаев: a) Сложение двух чисел Rational. Результат должен храниться в сокращенной форме. b) Вычитание двух, чисел Rational. Результат должен храниться в сокращенной форме. c) Перемножение двух чисел Rational. Результат должен храниться в сокращенной форме. d) Деление двух чисел Rational. Результат должен храниться в сокращенной форме. e) Печать чисел Rational в форме а / Ь, где а - числитель, а b - знаменатель. f) Печать чисел Rational в форме с плавающей точкой. 6.8. Модифицируйте класс Time на рис. 6.10 так, чтобы включить функцию-элемент tick, которая дает приращение времени, хранящегося в объекте Time, равное одной секунде. Объект Time должен всегда находиться в непротиворечивом состоянии. Напишите программу-драйвер для проверки функции-элемента tick в цикле, которая печатала бы время в стандартном формате на каждой итерации цикла и иллюстрировала правильную работу функции-элемента tick. Удостоверьтесь в правильности работы в следующих случаях: a) Приращение с переходом в следующую минуту. b) Приращение с переходом в следующий час. c) Приращение с переходом в следующий день (т.е. от 11:59:59 РМ к 12:00:00 AM). 6.9. Модифицируйте класс Date на рис.6.12 так, чтобы выполнить проверку ошибки в списке начальных значений для данных-элементов month, day и year. Кроме того, создайте функцию-элемент nextDay, которая бы увеличивала день на единицу. Объект Date должен всегда находиться в непротиворечивом состоянии. Напишите программу-драйвер, проверяющую функцию nextDay в цикле и печатающую время в стандартном формате на каждой итерации цикла, чтобы проиллюстрировать правильную работу функции nextDay. Удостоверьтесь в правильности работы в следующих случаях: a) Приращение с переходом в следующий месяц. b) Приращение с переходом в следующий год. 6.10. Объедините модифицированный класс Time упражнения 6.8 и модифицированный класс Date упражнения 6.9 в один класс по имени DateAndTime (в главе 9 мы обсудим наследование, которое позволит нам быстро решить эту задачу без изменения существующих определений классов). Модифицируйте функцию tick так, чтобы вызывать функцию nextDay, если время получает приращение с переходом на следующий день. Модифицируйте функции PrintStandard и PrintMilitary, чтобы выводить в добавление к времени еще и дату. Напишите программу-драйвер, проверяющую новый класс DateAndTime. Особо проверьте приращение времени с переходом на следующий день. 6.11. Модифицируйте набор функций в программе на рис. 6.10 так, чтобы возвращать ошибочные значения в случае попытки задать неправильные значения данным-элементам объекта класса Time. 6.12. Создайте класс Rectangle (прямоугольник). Класс имеет атрибуты length (длина) и width (ширина), каждый из которых по умолчанию равен 1. Он имеет функции-элементы, которые вычисляют периметр (perimeter) и площадь (area) прямоугольника. Он имеет функции записи и чтения как для length, так и для width. Функции записи должны проверять, что length и width - числа с плавающей запятой, находящиеся в пределах от 0.0 до 20.0. 6.13. Создайте более изощренный, чем в упражнении 6.12, класс Rectangle. Этот класс хранит только декартовы координаты четырех углов прямоугольника. Конструктор вызывает набор функций, которые принимают четыре группы координат и проверяют, чтобы каждая из координат х и у находилась в первом квадранте, в диапазоне от 0.0 до 20.0. Это множество функций должно также проверять, что переданные координаты действительно определяют прямоугольник. Должны быть предусмотрены функции-элементы, вычисляющие length, width, perimeter, и area. Длиной должно считаться большее из двух измерений. Включите предикатную функцию square, которая определяла бы, не является ли прямоугольник квадратом. 6.14. Модифицируйте класс Rectangle в упражнении 6.13 так, чтобы включить в него функцию draw, которая изображает прямоугольник внутри окна 25 на 25, перекрывающего часть первого квадранта, в котором находится прямоугольник. Включите функцию setFill-Character, чтобы задавать символ, которым будет заполняться прямоугольник внутри. Включите функцию setPerimeterCharacter, чтобы задавать символ, которым будут печататься границы прямоугольника. Если вы войдете во вкус, вы можете включить функции масштабирования размера прямоугольника, его вращения и перемещения в пределах первого квадранта. 6.15. Создайте класс Hugelnteger, который использует массив из 40 элементов для хранения целых чисел вплоть до больших целых, содержащих по 40 цифр. Создайте функции-элементы inputHugelnteger, outputHugelnteger, addHugelntegers и substrac-tHugelntegers для ввода, вывода, сложения и вычитания этих больших целых. Для сравнения объектов Hugelnteger создайте функции
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |