- Фантастика и фэнтези
- Ироническое фэнтези
- Стимпанк
- Детективная фантастика
- Киберпанк
- Попаданцы
- LitRPG
- Космоопера
- Технофэнтези
- Городская фантастика
- Русское фэнтези
- Юмористическая фантастика
- Космическая фантастика
- Боевое фэнтези
- Эпическая фантастика
- Зарубежная фантастика
- Книги магов
- Мистика
- Разная фантастика
- Разное фэнтези
- Любовное фэнтези
- Романтическая фантастика
- Городское фентези
- Историческая фантастика
- Историческое фэнтези
- Социально-философская фантастика
- Сказочная фантастика
- Иностранное фэнтези
- Романтическое фэнтези
- Ироническая фантастика
- Ужасы и Мистика
- Постапокалипсис
- Героическая фантастика
- Фэнтези
- Научная Фантастика
- Социально-психологическая
- Альтернативная история
- Боевая фантастика
- Разная литература
- Пословицы, поговорки
- Шахматы
- Визуальные искусства
- Фанфик
- Авто и ПДД
- Военное
- Отраслевые издания
- Гиды, путеводители
- Зарубежная образовательная литература
- Военная история
- Цитаты из афоризмов
- Современная литература
- Великолепные истории
- Начинающие авторы
- Современная зарубежная литература
- Боевые искусства
- Изобразительное искусство, фотография
- Кино
- Литература 19 века
- Недвижимость
- Музыка, музыканты
- Готические новеллы
- Истории из жизни
- Культура и искусство
- Спецслужбы
- Зарубежная прикладная литература
- Музыка, танцы
- Подростковая литература
- Прочее
- Военная техника, оружие
- Газеты и журналы
- Периодические издания
- Домоводство, Дом и семья
- Любовные романы
- Экономическая литература
- Научные и научно-популярные книги
- О животных
- Биохимия
- Культурология
- Юриспруденция
- Политика
- Психотерапия
- Языкознание
- Научпоп
- Медицина
- Психология, личное
- Радиотехника
- Филология
- Педагогика
- Образовательная литература
- Деловая литература
- Физика
- Науки: разное
- Химия
- Воспитание детей, педагогика
- Детская психология
- Зарубежная публицистика
- Биология
- Архитектура
- Зарубежная психология
- Науки о космосе
- Социология
- Математика
- География
- Беременность, ожидание детей
- Литературоведение
- Транспорт, военная техника
- Обществознание
- Зоология
- География
- Альтернативная медицина
- Иностранные языки
- Ветеринария
- Рефераты
- Астрология
- Биофизика
- Экология
- История Европы
- Учебники
- Шпаргалки
- Государство и право
- Ботаника
- Религиоведение
- История
- Техническая литература
- Прочая научная литература
- Психология
- Детективы и Триллеры
- Справочная литература
- Проза
- Новелла
- Юмор
- Проза
- Историческая проза
- Русская современная проза
- Советская классическая проза
- Повести
- Очерки
- Эссе
- Рассказы
- Зарубежная современная проза
- Сентиментальная проза
- Зарубежная классика
- Афоризмы
- Эпистолярная проза
- Феерия
- Семейный роман/Семейная сага
- Разное
- Антисоветская литература
- Магический реализм
- Русская классическая проза
- Современная проза
- О войне
- Контркультура
- Классическая проза
- Поэзия, Драматургия
- Детская литература
- Детская фантастика
- Детские остросюжетные
- Детские стихи
- Детские приключения
- Внеклассное чтение
- Учебная литература
- Зарубежные детские книги
- Бизнес
- Загадки
- Книги для подростков
- Школьные учебники
- Детский фольклор
- Книги для дошкольников
- Детские детективы
- Детская познавательная и развивающая литература
- Буквари
- Прочая детская литература
- Сказка
- Детская проза
- Детская образовательная литература
- Юмор
- Документальные книги
- Бизнес
- Внешнеэкономическая деятельность
- Тайм-менеджмент
- Кадровый менеджмент
- О бизнесе популярно
- Управление, подбор персонала
- Бизнес
- Менеджмент и кадры
- Продажи
- Экономика
- Ценные бумаги и инвестиции
- Малый бизнес
- Делопроизводство, офис
- Корпоративная культура, бизнес
- Банковское дело
- Финансы
- Зарубежная деловая литература
- Ораторское искусство / риторика
- Личные финансы
- Интернет-бизнес
- Поиск работы
- Государственное и муниципальное управление
- Бухучет и аудит
- Работа с клиентами
- Менеджмент
- Краткое содержание
- Личная эффективность
- Переговоры
- Приключения
- Старинная литература
- Религия и духовность
- Компьютеры и Интернет
- Блог
Читаем без скачивания Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп
Шрифт:
Интервал:
Закладка:
7. Назовите преимущества и недостатки интрузивных контейнеров по сравнению с неинтрузивными контейнерами из стандартной библиотеки языка С++. Составьте списки аргументов за и против этих контейнеров.
8. Какой лексикографический порядок принят на вашем компьютере? Выведите на печать каждый символ вашей клавиатуры и ее целочисленный код; затем выведите на печать символы в порядке, определенном их целочисленными кодами.
9. Используя только средства языка C, включая его стандартную библиотеку, прочитайте последовательность слов из потока stdin и выведите ее в поток stdout в лексикографическом порядке. Подсказка: функция сортировки в языке C называется qsort(); найдите ее описание. В качестве альтернативы вставляйте слова в упорядоченный список по мере его считывания. В стандартной библиотеке языка C списка нет.
10. Составьте список свойств языка C, заимствованных у языков C++ или C with Classes (раздел 27.1).
11. Составьте список свойств языка C, не заимствованных у языка C++.
12. Реализуйте (либо с помощью С-строк, либо с помощью типа int) таблицу поиска с операциями find(struct table*, const char*), insert(struct table*, const char*, int) и remove(struct table*, const char*). Эту таблицу можно представить в виде массива пар структур или пар массивов (const char*[] и int*); выбирайте сами. Выберите типы возвращаемых значений для ваших функций. Документируйте ваши проектные решения.
13. Напишите программу на языке С, которая является эквивалентом инструкций string s; cin>>s;. Иначе говоря, определите операцию ввода, которая считывала бы в массив символов, завершающийся нулем, произвольно длинную последовательность символов, разделенных пробелами.
14. Напишите функцию, получающую на вход массив целых чисел типа int и находящую наименьший и наибольший элементы. Она также должна вычислять медиану и среднее значение. Используйте в качестве возвращаемого значения структуру, хранящую результаты.
15. Сымитируйте одиночное наследование в языке C. Пусть каждый базовый класс содержит указатель на массив указателей на функции (для моделирования виртуальных функций как самостоятельных функций, получающих указатель на объект базового класса в качестве своего первого аргумента); см. раздел 27.2.3. Реализуйте вывод производного класса, сделав базовый класс типом первого члена производного класса. Для каждого класса соответствующим образом инициализируйте массив виртуальных функций. Для проверки реализуйте вариант старого примера с классом Shape с базовой и производной функциями draw(), которые просто выводили имя своего класса. Используйте только средства и библиотеку, существующие в стандарте языка С.
16. Для запутывания реализации предыдущего примера (за счет упрощения обозначений) используйте макросы.
Послесловие
Мы уже упоминали выше, что не все вопросы совместимости решены наилучшим образом. Тем не менее существует много программ на языке С (миллиарды строк), написанных кем-то, где-то и когда-то. Если вам придется читать и писать такие программы, эта глава подготовит вас к этому. Лично мы предпочитаем язык C++ и в этой главе частично объяснили почему. Пожалуйста, не недооценивайте пример интрузивного списка List — интрузивные списки List и непрозрачные типы являются важной и мощной технологией (как в языке C, так и в языке C++).
Часть V
Приложения
Приложение А
Краткий обзор языка
“Будьте осторожными со своими желаниями —
они могут сбыться”.
Пословица
В этом приложении кратко изложены основные сведения о ключевых элементах языка С++. Оно имеет очень избирательный характер и предназначено для новичков, желающих узнать немного больше, чем написано в книге. Цель этого приложения — краткость, а не полнота.
A.1. Общие сведения
Это приложение является справочником. Его не обязательно читать с начала до конца, как обычную главу. В нем (более или менее) систематично описаны ключевые элементы языка С++. Впрочем, это не полный справочник, а всего лишь его конспект. Приложение посвящено тем вопросам, которые чаще всего задают студенты. Как правило, для того чтобы получить более полный ответ, читателям придется прочитать соответствующие главы. Настоящее приложение нельзя считать эквивалентом стандарта по точности изложения и терминологии. Вместо этого мы сделали упор на доступность изложения. Более полную информацию читатели смогут найти в книге Stroustrup, The C++ Programming Language. Определение языка C++ изложено в стандарте ISO C++, но этот документ не подходит для новичков. Впрочем, он для них и не был предназначен. Не забудьте о возможности использовать документацию, имеющуюся в сети. Если вы будете заглядывать в приложение, читая первые главы, то многое вам покажется непонятным. Читая остальные главы, вы постепенно во всем разберетесь.
Возможности стандартной библиотеки описаны в приложении Б.
Стандарт языка C++ определен комитетом, работающим под эгидой ISO (International Organization for Standardization — Международная организация по стандартизации) в сотрудничестве с национальными стандартными комитетами, такими как INCITS (США), BSI (Великобритания) и AFNOR (Франция). Действующим стандартом считается документ ISO/IEC 14882:2003 Standard for Programming Language C++. Он доступен как в электронном виде, так и в виде обычной книги: The C++ Standard, опубликованной издательством Wiley (ISBN 2870846747).
A.1.1. Терминология
В стандарте языка C++ даны следующие определения программы на языке C++ и разных его конструкций.
• Соответствие стандарту. Программа, написанная на языке C++ в соответствии со стандартом, называется соответствующей стандарту (conforming), или легальной (legal), или корректной (valid).
• Зависимость от реализации. Программа может зависеть (и обычно зависит) от свойств (таких как размер типа int или числовое значение символа 'a'), которые точно определены только для заданного компилятора, операционной системы, машинной архитектуры и т.д. Свойства языка, зависящие от реализации, перечислены в стандарте и должны быть указаны в сопроводительной документации компилятора, а также в стандартных заголовках, таких как <limits> (см. раздел Б.1.1). Таким образом, соответствие стандарту не эквивалентно переносимости программы на разные реализации языка C++ .
• Неопределенность. Смысл некоторых конструкций является неустановленным точно (unspecified), неопределенным (undefined) или не соответствующим стандарту, но не диагностируемым (not conforming but not requiring a diagnostic). Очевидно, что такие свойства лучше не использовать. В этой книге их нет. Перечислим неопределенные свойства, которых следует избегать.
• Несогласованные определения в разных исходных файлах (используйте заголовочные файлы согласованно; см. раздел 8.3).
• Повторное чтение и запись одной и той же переменной в выражении (основным примером является инструкция a[i]=++i;).
• Многочисленные явные преобразования типов (приведения), особенно reinterpret_cast.
A.1.2. Старт и завершение программы
В программе на языке С++ должна быть отдельная глобальная функция с именем main(). Программа начинается с