Программирование >>  Структурное программирование 

1 ... 164 165 166 [ 167 ] 168 169 170 ... 342


Ответы на упражнения для самопроверки

7.1. а) инициализатор элементов. Ъ) друг (friend), с) new, указатель, d) инициализирован, е) Статический, f) this, g) const, h) конструктор с умолчанием, i) нестатическим, j) private, protected, к) раньше. 1) delete.

7.2. a) Ошибка: определение класса Example имеет две ошибки. Первая заключена в функции getlncrementedData. Функция объявлена как const, но она изменяет объект.

Исправление: чтобы исправить первую ошибку, удалите ключевое слово const из описания функции getlncrementedData.

Ошибка: вторая ошибка заключена в функции getCount. Эта функция объявлена как static, так что ей не разрешен доступ к любым нестатическим элементам класса.

Исправление: чтобы исправить вторую ошибку, удалите строку выходных данных из определения функции getCount.

b) Ошибка: память, динамически выделенная с помощью new, освобождается функцией free стандартной библиотеки С.

h) Если объект-элемент класса не снабжен инициализатором, вызывается этого класса.

i) Функция-элемент может быть объявлена как static, если она не должна иметь доступ к элементам класса.

j) Дружественные функции могут иметь доступ к элементам класса с доступом и .

к) Объекты-элементы создаются , чем объект включающего их

класса.

1) Операция освобождает память, выделенную перед этим с помощью new.

7.2. Найдите ошибку или ошибки в каждом из следующих фрагментов программ и объясните, как их исправить.

a) class Example {

public:

Example(int у = 10) { data = у;}

int getlncrementedData() const { return ++data;} static int getCount ()

cout Data is << data endl; return count;

private:

int data;

static int count;

b) char *string;

string = new char[20]; free(string);



Исправление: используйте операцию С++ delete для освобождения памяти. Динамическое распределение памяти в стиле С нельзя смешивать с операциями new и delete С++.

Упражнения

7.3. Что общее и в чем различие между динамическим выделением памяти в С++ с помощью операций new и delete и динамическим выделением памяти с помощью функций malloc и free стандартной библиотеки С.

7.4. Объясните понятие дружественности в С++. Объясните отрицательные стороны дружественности, о которых написано в книге.

7.5. Может ли правильное описание класса Time включать оба следующих конструктора?

Time (int h = О, int m = О, int s = 0); Time 0 ;

7.6. Что случится, если для конструктора или деструктора указать тип возвращаемого значения, даже void?

7.7. Создайте класс Date со следующими возможностями:

a) Вывод дат в таких нескольких форматах:

DD YYYY MM/DD/YY июнь 14, 1992

b) Используйте перегруженные конструкторы для создания объектов Date с начальными значениями дат в форматах пункта а).

c) Создайте конструктор Date, который читает системную дату, используя стандартные библиотечные функции заголовочного файла time.h, и передает ее элементам Date.

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

7.8. Создайте класс SavingsAccount (хранение вкладов). Используйте статический элемент данных annuallnterestRate (процентная ставка) для хранения информации о каждом вкладчике. Каждый элемент этого класса содержит закрытый элемент данных savingsBal-апсе, указывающий сумму, которую вкладчик имеет на депозите. Напишите функцию-элемент calculateMonthlylnterest (расчет ежемесячного дохода), которая ежемесячно вычисляет доход путем деления на 12 произведения balance и annuallnterestRate; этот доход должен прибавляться к savingsBalance. Напишите статическую функцию-элемент modifylnterestRate (изменение процентной ставки), которая задает annuallnterestRate новое значение. Напишите программу драйвер для проверки класса SavingsAccount. Создайте два различных объекта SavingsAccount saver 1 и saver2, с балансами $2000.00 и $3000.00 соответственно. Установите annuallnterestRate равным 3%, затем вычислите месячный доход по вкладу и напечатайте новые балансы для каждого из вкладчиков. Затем устано-



вите annuallnterestRate равным 4%, вычислите месячный доход по вкладу и напечатайте новые балансы для каждого из вкладчиков.

7.9. Создайте класс IntegerSet (множество целых). Каждый объект класса может вмещать целые в диапазоне от О до 100. Множество представлено внутренне как массив из нулей и единиц. Элемент массива а[ i ] равен 1, если целое i находится в множестве. Элемент массива а[ j ] равен О, если целое j не находится в множестве. Конструктор по умолчанию инициализирует множество как пустое, т.е. множество, чье представление в виде массива содержит только нули.

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

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

Напишите функцию-элемент insertEIement, которая вставляет новое целое к в множество (устанавливает элемент а[к] равным 1). Напишите функцию элемент deleteElement, которая удаляет из множества целое m (устанавливает элемент а[ш] равным 0).

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

Напишите функцию-элемент isEqualTo, которая определяет, равны ли друг другу два множества.

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

Теперь напишите программу драйвер для проверки вашего класса IntegerSet. Создайте несколько объектов IntegerSet. Убедитесь, что все ваши функции-элементы работают соответствующим образом.



1 ... 164 165 166 [ 167 ] 168 169 170 ... 342

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