13. Напишите программу на языке С, которая является эквивалентом инструкций string s
; cin>>s
;. Иначе говоря, определите операцию ввода, которая считывала бы в массив символов, завершающийся нулем, произвольно длинную последовательность символов, разделенных пробелами.
14. Напишите функцию, получающую на вход массив целых чисел типа int
и находящую наименьший и наибольший элементы. Она также должна вычислять медиану и среднее значение. Используйте в качестве возвращаемого значения структуру, хранящую результаты.
15. Сымитируйте одиночное наследование в языке C. Пусть каждый базовый класс содержит указатель на массив указателей на функции (для моделирования виртуальных функций как самостоятельных функций, получающих указатель на объект базового класса в качестве своего первого аргумента); см. раздел 27.2.3. Реализуйте вывод производного класса, сделав базовый класс типом первого члена производного класса. Для каждого класса соответствующим образом инициализируйте массив виртуальных функций. Для проверки реализуйте вариант старого примера с классом Shape
с базовой и производной функциями draw()
, которые просто выводили имя своего класса. Используйте только средства и библиотеку, существующие в стандарте языка С.
16. Для запутывания реализации предыдущего примера (за счет упрощения обозначений) используйте макросы.
Послесловие
Мы уже упоминали выше, что не все вопросы совместимости решены наилучшим образом. Тем не менее существует много программ на языке С (миллиарды строк), написанных кем-то, где-то и когда-то. Если вам придется читать и писать такие программы, эта глава подготовит вас к этому. Лично мы предпочитаем язык C++ и в этой главе частично объяснили почему. Пожалуйста, не недооценивайте пример интрузивного списка List
— интрузивные списки List
и непрозрачные типы являются важной и мощной технологией (как в языке C, так и в языке C++).
Часть V
Приложения
Приложение А
Краткий обзор языка
“Будьте осторожными со своими желаниями —
они могут сбыться”.
Пословица
В этом приложении кратко изложены основные сведения о ключевых элементах языка С++. Оно имеет очень избирательный характер и предназначено для новичков, желающих узнать немного больше, чем написано в книге. Цель этого приложения — краткость, а не полнота.
A.1. Общие сведения
Это приложение является справочником. Его не обязательно читать с начала до конца, как обычную главу. В нем (более или менее) систематично описаны ключевые элементы языка С++. Впрочем, это не полный справочник, а всего лишь его конспект. Приложение посвящено тем вопросам, которые чаще всего задают студенты. Как правило, для того чтобы получить более полный ответ, читателям придется прочитать соответствующие главы. Настоящее приложение нельзя считать эквивалентом стандарта по точности изложения и терминологии. Вместо этого мы сделали упор на доступность изложения. Более полную информацию читатели смогут найти в книге Stroustrup,
Возможности стандартной библиотеки описаны в приложении Б.
Стандарт языка C++ определен комитетом, работающим под эгидой ISO (International Organization for Standardization — Международная организация по стандартизации) в сотрудничестве с национальными стандартными комитетами, такими как INCITS (США), BSI (Великобритания) и AFNOR (Франция). Действующим стандартом считается документ ISO/IEC 14882:2003 Standard for Programming Language C++. Он доступен как в электронном виде, так и в виде обычной книги:
A.1.1. Терминология
В стандарте языка C++ даны следующие определения программы на языке C++ и разных его конструкций.
•