С++ для начинающих



Объектно-ориентированный подход - часть 8


 swap() with IntArrayRC ia2

 Assertion failed: ix >= 0 && ix < _size,

   file IntArrayRC.h, line 19

Упражнение 2.8

Отношение наследования между типом и подтипом служит примером отношения является. Так, массив IntArrayRC является подвидом массива IntArray, книга является подвидом выдаваемых библиотекой предметов, аудиокнига является подвидом книги и т.д. Какие из следующих утверждений верны?

(a) функция-член является подвидом функции

(b) функция-член является подвидом класса

(c) конструктор является подвидом функции-члена

(d) самолет является подвидом транспортного средства

(e) машина является подвидом грузовика

(f) круг является подвидом геометрической фигуры

(g) квадрат является подвидом треугольника

(h) автомобиль является подвидом самолета

(i) читатель является подвидом библиотеки

Упражнение 2.9

Определите, какие из следующих функций могут различаться в реализации для производных классов и, таким образом, выступают кандидатами в виртуальные функции:

(a) rotate();

(b) print();

(c) size();

(d) DateBorrowed(); // дата выдачи книги

(e) rewind();

(f) borrower(); // читатель

(g) is_late(); // книга просрочена

(h) is_on_loan(); // книга выдана

Упражнение 2.10

Ходят споры о том, не нарушает ли принципа инкапсуляции введение защищенного уровня доступа. Есть мнение, что для соблюдения этого принципа следует отказаться от использования такого уровня и работать только с закрытыми членами. Противоположная точка зрения гласит, что без защищенных членов производные классы невозможно реализовывать достаточно эффективно и в конце концов пришлось бы везде задействовать открытый уровень доступа. А каково ваше мнение по этому поводу?

Упражнение 2.11

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

Упражнение 2.12

Каждая из приведенных ниже абстракций определяет целое семейство подвидов, как, например, абстракция “транспортное средство” может определять “самолет”, “автомобиль”, “велосипед”. Выберите одно из семейств и составьте для него иерархию подвидов. Приведите пример открытого интерфейса для этой иерархии, включая конструкторы. Определите виртуальные функции. Напишите псевдокод маленькой программы, использующей данный интерфейс.

(a) Точка

(b) Служащий

(c) Фигура

(d) Телефонный_номер

(e) Счет_в_банке

(f) Курс_продажи




Содержание  Назад  Вперед