мы инкапсулируем выделение памяти
В разделе 17. 7 мы инкапсулируем выделение памяти и конструирование объектов иерархии Query в управляющий класс UserQuery. Это гарантирует выполнение нашего предположения. На уровне программы в целом следует перегрузить операторы new и delete для классов иерархии. Например, можно поступить следующим образом. Оператор new устанавливает в объекте флажок, говорящий, что память для него выделена из хипа. Перегруженный оператор delete
проверяет этот флажок: если он есть, то память освобождается с помощью стандартного оператора delete.
Упражнение 17.7
Идентифицируйте конструкторы и деструкторы базового и производных классов для той иерархии, которую вы выбрали в упражнении 17.2 (раздел 17.1).
Упражнение 17.8
Измените реализацию класса OrQuery
так, чтобы он был производным от BinaryQuery.
Упражнение 17.9
Найдите ошибку в следующем определении класса:
class Object { public: virtual ~Object(); virtual string isA(); protected: string _isA; private: Object( string s ) : _isA( s ) {} |
};
Упражнение 17.10
Дано определение базового класса:
class ConcreteBase { public: explicit ConcreteBase( int ); virtual ostream& print( ostream& ); virtual ~Base(); static int object_count(); protected: int _id; static int _object_count; |
};
Что неправильно в следующих фрагментах:
(a) class C1 : public ConcreteBase { public: C1( int val ) : _id( _object_count++ ) {} // ... |
};
(b) class C2 : public C1 { public: C2( int val ) : ConcreteBase( val ), C1( val ) {} // ... |
};
(c) class C3 : public C2 { public: C3( int val ) : C2( val ), _object_count( val ) {} // ... |
};
(d) class C4 : public ConcreteBase { public: C4( int val ) : ConcreteBase ( _id+val ){} // ... |
};
Упражнение 17.11
В первоначальном определении языка C++ порядок следования инициализаторов в списке инициализации членов определял порядок вызова конструкторов. Принцип, который действует сейчас, был принят в 1986 году. Как вы думаете, почему была изменена исходная спецификация?
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий