straustrup2 (852740), страница 7
Текст из файла (страница 7)
С такими объектами можно работатьнадежно и просто даже в тех случаях, когда их тип нельзя установить на стадии трансляции.Программирование с использованием таких объектов обычно называют объектно-ориентированным.Если этот метод применяется правильно, то программы становятся короче и понятнее, асопровождение их упрощается.Ключевым понятием С++ является класс. Класс - это определяемый пользователем тип. Классыобеспечивают упрятывание данных, их инициализацию, неявное преобразование пользовательскихтипов, динамическое задание типов, контролируемое пользователем управление памятью и средствадля перегрузки операций. В языке С++ концепции контроля типов и модульного построения программреализованы более полно, чем в С. Кроме того, С++ содержит усовершенствования, прямо с классамине связанные: символические константы, функции-подстановки, стандартные значения параметровфункций, перегрузка имен функций, операции управления свободной памятью и ссылочный тип.
В С++сохранены все возможности С эффективной работы с основными объектами, отражающимиаппаратную "реальность" (разряды, байты, слова, адреса и т.д.). Это позволяет достаточно эффективнореализовывать пользовательские типы.Как язык, так и стандартные библиотеки С++ проектировались в расчете на переносимость.
Имеющиесяреализации языка будут работать в большинстве систем, поддерживающих С. В программах на С++можно использовать библиотеки С. Большинство служебных программ, рассчитанных на С, можноиспользовать и в С++.Данная книга в первую очередь рассчитана на профессиональных программистов, желающих изучитьновый язык и использовать его для нетривиальных задач. В книге дается полное описание С++,содержится много завершенных примеров и еще больше фрагментов программ.Выражение признательностиЯзык С++ никогда бы не стал реальностью без, если бы постоянно не использовались предложения исоветы и не учитывалась конструктивная критика со стороны многих друзей и коллег. Особенно следуетупомянуть Тома Карджила, Джима Копли, Стью Фельдмана, Сэнди Фрэзера, Стива Джонсона, БрайанаКернигана, Барта Локанти, Дага Макилроя, Дэнниса Ритчи, Лэрри Рослера, Джерри Шварца и ДжонаШапиро, которые внесли важные для развития языка идеи.
Дэйв Пресотто реализовал текущую версиюбиблиотеки потокового ввода/вывода.Свой вклад в развитие С++ и создание транслятора внесли сотни людей, которые присылали мнепредложения по совершенствованию языка, описания трудностей, с которыми они сталкивались, иошибки транслятора. Здесь я могу упомянуть лишь некоторых из них: Гари Бишопа, Эндрю Хьюма,Тома Карцеса, Виктора Миленковича, Роба Мюррэя, Леони Росс, Брайана Шмальта и Гарри Уокера.Многие участвовали в подготовке книги к изданию, особенно Джон Бентли, Лаура Ивс, Брайан Керниган,Тэд Ковальски, Стив Махани, Джон Шапиро и участники семинара по языку С++, который проводилсяфирмой Bell Labs в Колумбии, Огайо, 26-27 июня 1985 г.Мюррей-Хилл, шт.Нью-ДжерсиБьерн Страуструп11Бьерн Страуструп.Язык программирования С++ПРЕДВАРИТЕЛЬНЫЕ ЗАМЕЧАНИЯ"О многом - молвил Морж,- пришла пора поговорить ".Л.
КэрроллДанная глава содержит краткий обзор книги, список литературы и некоторые дополнительныезамечания о языке С++. Замечания касаются истории создания С++, идей, которые оказалисущественное влияние на разработку языка, и некоторых мыслей по поводу программирования на С++.Эта глава не является введением; приведенные замечания не являются необходимыми для пониманияпоследующих глав. Некоторые из них предполагают знакомство читателя с С++.Структура книгиКнига состоит из трех частей. Главы с 1 по 10 являются учебником по языку. В главах с 11 по 13обсуждаются вопросы проектирования и развития программного обеспечения с учетом возможностейС++.
В конце книги приведено полное справочное руководство по языку. Исчерпывающее описаниеконструкций С++ содержится только там. Учебная часть книги содержит примеры, советы,предостережения и упражнения, для которых не нашлось места в руководстве.Книга в основном посвящена вопросу, как с помощью языка C++ структурировать программу, а невопросу, как записать на нем алгоритм. Следовательно, там, где можно было выбирать, предпочтениеотдавалось не профессиональным, но сложным для понимания, а тривиальным алгоритмам. Так водном из примеров используется пузырьковая сортировка, хотя алгоритм быстрой сортировки большеподходит для настоящей программы. Часто написать ту же программу, но с более эффективнымалгоритмом, предлагается в виде упражнения.Глава 1 содержит краткий обзор основных концепций и конструкций С++.
Она позволяет познакомитьсяс языком в общих чертах. Подробные объяснения конструкций языка и способов их применениясодержатся в последующих главах. Обсуждаются в первую очередь средства, обеспечивающиеабстракцию данных и объектно-ориентированное программирование. Основные средства процедурногопрограммирования упоминаются кратко.В главах 2, 3 и 4 описываются средства С++, которые не используются для определения новых типов:основные типы, выражения и структуры управления.
Другими словами, эти главы содержат описаниетой части языка, которая по сути представляет С. Изложение в указанных главах идет в углубленномвиде.Главы 5 - 8 посвящены средствам построения новых типов, которые не имеют аналогов в С. В главе 5вводится основное понятие - класс. В ней показано, как можно определять пользовательские типы(классы), инициализировать их, обращаться к ним, и, наконец, как уничтожать их. Глава 6 посвященапонятию производных классов, которое позволяет строить из простых классов более сложные.
Оно даеттакже возможность эффективной и безопасной (в смысле типа) работы в тех ситуациях, когда типыобъектов на стадии трансляции неизвестны. В главе 7 объясняется, как можно определить унарные ибинарные операции для пользовательских типов, как задавать преобразования таких типов, и какимобразом можно создавать, копировать и удалять объекты, представляющие пользовательские типы.Глава 8 посвящена шаблонам типа, т.е. такому средству С++, которое позволяет определить семействотипов и функций.В главе 9 обсуждается обработка особых ситуаций, рассматриваются возможные реакции на ошибки иметоды построения устойчивых к ошибкам систем.
В главе 10 определяются классы ostream и istream,предоставляемые стандартной библиотекой для потокового ввода-вывода.Главы 11 - 13 посвящены вопросам, связанным с применением С++ для проектирования и реализациибольших программных систем. В главе 11 в основном рассматриваются вопросы проектирования иуправления программными проектами. В главе 12 обсуждается взаимосвязь между языком С++ ипроблемами проектирования. В главе 13 показаны способы создания библиотек.Завершается книга справочным руководством по С++.Ссылки на различные части книги даются в виде $$2.3.4, что означает раздел 3.4 главы 2.
Для12Бьерн Страуструп.Язык программирования С++обозначения справочного руководства применяется буква R, например, $$R.8.5.5.Замечания по реализацииСуществует несколько распространяемых независимых реализаций С++. Появилось большое числосервисных программ, библиотек и интегрированных систем программирования.
Имеется масса книг,руководств, журналов, статей, сообщений по электронной почте, технических бюллетеней, отчетов оконференциях и курсов, из которых можно получить все необходимые сведения о последнихизменениях в С++, его использовании, сервисных программах, библиотеках, новых трансляторах и т.д.Если вы серьезно рассчитываете на С++, стоит получить доступ хотя бы к двум источникаминформации, поскольку у каждого источника может быть своя позиция.Большинство программных фрагментов, приведенных в книге, взяты непосредственно из текстовпрограмм, которые были транслированы на машине DEC VAX 11/8550 под управлением 10-й версиисистемы UNIX [25]. Использовался транслятор, являющийся прямым потомком транслятора С++,созданного автором. Здесь описывается "чистый С++", т.е.
не используются никакие зависящие отреализации расширения. Следовательно, примеры должны идти при любой реализации языка. Однако,шаблоны типа и обработка особых ситуаций относятся к самым последним расширениям языка, ивозможно, что ваш транслятор их не содержит.УпражненияУпражнения даются в конце каждой главы. Чаще всего они предлагают написать программу. Решениемможет считаться программа, которая транслируется и правильно работает хотя бы на несколькихтестах.
Упражнения могут значительно различаться по сложности, поэтому дается приблизительнаяоценка степени их сложности. Рост сложности экспоненциальный, так что, если на упражнение (*1) у васуйдет пять минут, то (*2) может занять час, а (*3) - целый день. Однако время написания и отладкипрограммы больше зависит от опыта читателя, чем от самого упражнения. На упражнение (*1) можетпотребоваться целый день, если перед запуском программы читателю придется ознакомиться с новойвычислительной системой. С другой стороны, тот, у кого под рукой окажется нужный набор программ,может сделать упражнение (*5) за один час.Любую книгу по программированию на языке С можно использовать как источник дополнительныхупражнений при изучении глав 2 - 4.
В книге Ахо ([1]) приведено много общих структур данных иалгоритмов в терминах абстрактных типов данных. Эту книгу также можно использовать как источникупражнений при изучении глав 5 - 8. Однако, использованному в ней языку не достает функций-членов ипроизводных классов. Поэтому определяемые пользователем типы на С++ можно написать болееэлегантно.Замечания по проекту языкаПри разработке языка С++ одним из важнейших критериев выбора была простота. Когда возникалвопрос, что упростить: руководство по языку и другую документацию или транслятор, - то выбор делалив пользу первого.