|
Программирование >> Дополнительные возможности наследования
Какими атрибутами должен обладать класс, чтобы его можно было использовать со стандартными контейнерами? В классе должны быть явно определены стандартный конструктор, конструктор-копировщик и перефуженный оператор присваивания. Коллоквиум в этом разделе предлагаются вопросы для самоконфОля и укрепления полученных знаний, а также ряд упражнений, которые помогут закрепить ващи практические навыки. Попытайтесь самостоятельно ответить на вопросы теста и выполнить задания, а потом сверьте полученные результаты с ответами в приложении Г. Не приступайте к изучению материала следующей главы, если для вас остались неясными хотя бы некоторые из предложенных ниже вопросов. Контрольные вопросы 1. Какова разница между шаблоном и макросом? 2. В чем состоит отличие параметра щаблона от параметра функции? 3. Чем отличается обычный дружественный шаблонный класс от дружественного шаблонного класса, специализированного по типу? 4. Можно ли обеспечить особое выполнение для определенного экземпляра шаблона? 5. Сколько статических переменных-членов будет создано, если в определение класса шаблона поместить один статический член? 6. Что представляют собой итераторы? 7. Что такое объект функции? Упражнения 1. Создайте шаблон на основе данного класса List: class List { private: public: List():head(0),tail(0),theCount(0) { } virtual ListO; void insert( int value ); void append( int value ); int is present( int value ) const; int is empty() const { return head == 0; } int countO const { return theCount; } private: class ListCell { public: ListCell(int value, ListCell *cell = ) :val(value), next(cell){ } int val; ListCell .next; ListCell .head; ListCell .tail; int theCount; 2. Напишите выполнение обычной (не шаблонной) версии класса List. 3. Напишите шаблонный вариант выполнения. 4. Объявите три списка объектов: типа Strings, типа Cat и типа int. 5. Жучки: что неправильно в приведенном ниже профаммном коде? (Предположите, что определяется шаблон класса List, а Cat - это класс, определенный на одном из предыдущих занятий.) List<Cat> Cat List; Cat Felix; CatList.append( Felix ); cout << Felix is << ( Cat List.is present( Felix ) ) ? : not present\ n ; 6. ПОДСКАЗКА (поскольку задание не из самых легких): подумайте, чем тип Cat отличается от типа int? 7. Объявите дружественный оператор operator== для класса List. 8. Напишите выполнение дружественного оператора operator== для класса List. 9. Грешит ли оператор operator== той же проблемой, которая существует в упражнении 5? 10. Напишите выполнение функции шаблона, осуществляющей операцию обмена данными, в результате чего две переменные должны обменяться содержимым. 11. Напишите выполнение класса SchoolClass, показанного в листинге 19.8, как списка. Для добавления в список четырех студентов используйте функцию push back(). Затем пройдитесь по полученному списку и увеличьте возраст каждого студента на один год. 12. Измените код из упражнения 10 таким образом, чтобы для отображения данных о каждом студенте использовался обьект функции. йень2П-й ситуаций и ошиОок Программный код, представленный в этой книге, был создан в иллюстративных целях. Мы не упоминали о возможных ошибках, чтобы не отвлекать вас от основных моментов профаммирования, представленных в том или ином фрагменте профаммы. Реальные же профаммы должны обязательно предусмафивать возможные аварийные ситуации. Сегодня вы узнаете: Что представляют собой исключительные ситуации Как перехватываются и обрабатываются исключения Что такое наследование исключений Как использовать исключения в общей сфуктуре отслеживания и устранения ошибок Что представляет собой отладка профаммы Ошибки, ппгрешнпсти, ляпсусы и гнилпи кпд к сожалению, все программисты допускают ошибки. Чем больше профамма, тем выше вероятность возникновения в ней ошибок, многие из которых до поры до времени остаются незамеченными и попадают в конечный программный продукт, уже выпущенный на рынок. С этой печальной истиной трудно смириться, поэтому создание надежных, свободных от ошибок профамм должно быть задачей номер один для каждого профаммиста, серьезно относящегося к своему делу. Одна из наиболее острых проблем в индустрии создания программ - это нестабильный профаммный код, нафаршированный ошибками. Обычно самые большие расходы во многих работах, связанных с программированием, приходятся на тестирование профамм и исправление ошибок. Тот, кто решит проблему создания добротных, надежных и безотказных профамм за короткий срок и при низких затратах, произведет революцию во всей индустрии профаммных продуктов. Все ошибки в профаммах можно разделить на несколько фупп. Первый тип ошибок вызван недостаточно проработанной логикой алгоритма выполнения профаммы. 94�65452�6
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |