Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Aliens Vs Predator |#6| We walk through the tunnels
Aliens Vs Predator |#5| Unexpected meeting
Aliens Vs Predator |#4| Boss fight with the Queen
Aliens Vs Predator |#3| Escaping from the captivity of the xenomorph

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Страустрап Б. Весь текст 579.17 Kb

Язык С++

Предыдущая страница Следующая страница
1 2  3 4 5 6 7 8 9 10 11 12 13 14 ... 50
использовать большую часть инструментальных средств, поддерживающих
программирование на C.
  Эта книга  предназначена главным  образом для  того, чтобы помочь
серьезным  программистам   изучить   язык   и   применять   его   в
нетривиальных проектах.  В ней  дано  полное  описание  C++,  много
примеров и еще больше фрагментов программ.

     Благодарности

  C++  никогда   бы   не   созрел  без  постоянного  использования,
предложений и  конструктивной критики  со стороны  многих друзей  и
                              - стр 9 -

коллег. Том  Карджил, Джим Коплин, Сту Фельдман, Сэнди Фрэзер, Стив
Джонсон, Брайэн Керниган, Барт Локанти, Дуг МакИлрой, Дэннис Риччи,
Лэрри Рослер, Джерри Шварц и Джон Шопиро подали важные для развития
языка идеи.  Дэйв Пресотто  написал текущую  реализацию  библиотеки
потоков ввода/вывода.
  Кроме того, в развитие C++ внесли свой вклад сотни людей, которые
присылали   мне   предложения   по   усовершенствованию,   описания
трудностей, с  которыми они  сталкивались,  и  ошибки  компилятора.
Здесь я  могу упомянуть  лишь немногих  из них:  Гэри Бишоп,  Эндрю
Хьюм, Том Карцес, Виктор Миленкович, Роб Мюррэй, Леони Росс, Брайэн
Шмальт и Гарри Уокер.

  В издании этой книги мне помогли многие люди, в частности, Джон
Бентли, Лаура Ивс, Брайэн Керниган, Тэд Ковальски, Стив Махани,
Джон Шопиро и участники семинара по C++, который проводился в Bell
Labs, Колумбия, Огайо, 26-27 июня 1985 года.

                      Мюррэй Хилл, Нью Джерси      Бьярн Страустрап

                       Заметки для читателя

                                   "О многом,"-молвил Морж,-"Пришла
                                                  пора поговорить."

                                                          Л. Кэррол

  В этой  главе содержится  обзор книги,  список  библиографических
ссылок и  некоторые замечания  по C++  вспомогательного  характера.
Замечания  касаются   истории  C++,   идей,  оказавших  влияние  на
разработку C++,  и мыслей  по поводу  программирования на  C++. Эта
глава  не   является  введением:  замечания  не    обязательны  для
понимания последующих  глав, и некоторые из них предполагают знание
C++.

     Структура этой книги

  Глава 1  - это  короткое  турне  по  основным  особенностям  C++,
предназначенное для  того, чтобы  дать читателю почувствовать язык.
Программисты на  C первую  половину  главы  могут  прочитать  очень
быстро; она охватывает главным образом черты, общие для C и C++. Во
второй главе  описаны  средства  определения  новых  типов  в  C++;
начинающие могут  отложить более  подробное изучение этого до того,
как прочтут Главы 2, 3 и 4.
  В Главах  2, 3  и 4  описываются средства  C++, не  включенные  в
определение новых  типов:  основные  типы,  выражения  и  структуры
управления в  C++ программах.  Другими словами,  в них  описывается
подмножество  C++,   которое  по   существу  является   языком   C.
Рассмотрение  в   них  проводится   гораздо  подробнее,  но  полную
информацию можно найти только в справочном руководстве.
  В Главах  5, 6  и 7  описываются средства  C++ по  описанию новых
типов, особенности  языка, не  имеющие эквивалента  в C.  В Главе 5
приводится понятие  базового  класса,  и  показывается,  как  можно
инициализировать   объекты   типа,   определенного   пользователем,
обращаться к ним и, наконец, убирать их. В Главе 6 объясняется, как
для определенного  пользователем типа определять унарные и бинарные
операции, как  задавать преобразования  между типами, определенными
пользователем,  и   как  как  задавать  то,  каким  образом  должно
обрабатываться каждое  создание, уничтожение и копирование значения
определенного  пользователем  типа.  Глава  7  описывает  концепцию
производных классов,  которая позволяет  программисту строить более
сложные  классы   из  более  простых,  обеспечивать  альтернативные
интерфейсы класса  и работать с объектами безопасным и не требующим
беспокоиться о  типе способом  в тех ситуациях, когда типы объектов
не могут быть известны на стадии компиляции.
  В Главе  8 представлены классы ostream и istream, предоставляемые
стандартной библиотекой  для осуществления  ввода-вывода. Эта глава
имеет двоякую  цель: в  ней  представлены  полезные  средства,  что
одновременно является реальным примером использования C++.
  И, наконец, в книгу включено справочное руководство по C++.
  Ссылки на различные части этой книги даются в форме #2.3.4 (Глава
2 подраздел  3.4). Глава  с - это справочное руководство; например,
#с.8.5.5.
                             - стр 11 -

     Замечания по реализации

  Во время  написания этой  книги все  реализации C++  использовали
версии единственного интерфейсного компилятора#. Он используется на
многих   архитектурах,    включая   действующие    версии   системы
операционной системы  UNIX на AT&T 3B, DEC VAX, IBM 370 и Motorolla
68000. Фрагменты  программ, которые  приводятся в этой книге, взяты
непосредственно  из  исходных файлов, которые компилировались на 3B
в UNIX  System V  версии 2  [15], VAX11/750 под 8-ой Редакцией UNIX
[16] и  CCI Power 6/32 под BSD4.2 UNIX [17]. Язык, описанный в этой
книге,  -   это  "чистый  C++",  но  имеющиеся  на  текущий  момент
компиляторы реализуют  большое число  "анахронизмов"  (описанных  в
#с.15.3), которые должны способствовать переходу от C к C++.

     Упражнения

  Упражнения находятся в конце глав. Все упражнения главным образом
типа напишите-программу. Для решения всегда пишите такую прогармму,
которая  будет  компилироваться  и  работать  по  меньшей  мере  на
нескольких тестовых  случаях. Упражнения  различаются в основном по
сложности, поэтому  они помечены  оценкой степени  сложности. Шкала
экспоненциальная, так  что если на упражение (*1) вам потребовалось
пять минут,  то упражнение  (*2) вам может  потребоваться час, а на
(*3) -  день. Время,  которое требуется  на то,  чтобы  написать  и
оттестировать программу,  зависит больше  от опыта читателя, нежели
от самого  упражения. Упражнение  (*1) может  отнять день, если для
того, чтобы запустить ее,  читателю сначала  придется знакомиться с
новой вычислительной  системой. С  другой стороны,  тот, у кого под
рукой окажется нужный набор программ, может сделать упражнение (*5)
за  час.  В  качестве  источника  упражнений  к  Главам  2-4  можно
использовать любую  книгу по  C. У  Ахо и др. [1] приведено большое
количество общих структур данных и алгоритмов втерминах абстрактных
типов данных. Эту книгу также может служить источником упражнений к
Главам 5-7.  Однако языку,  который  в  этой  книге  использовался,
недостает как  функций членов,  так и  производных классов. Поэтому
определенные  пользователем  типы часто  можно выражать в C++ более
элегантно.

     Замечания по проекту языка

  Существенным критерием  при разработке  языка была простота; там,
где возникал  выбор между  упрощением руководства по языку и другой
документации и  упрощением компилятора, выбиралось первое. Огромное
значение также  придавалось совместимости с C; это помешало удалить
синтаксис C.
  В C++  нет типов  данных высокого уровня и нет первичных операций
высокого уровня.  В нем  нет, например, матричного типа с операцией
обращения  или   типа  строка   с  операцией   конкатенации.   Если
пользователю понадобятся подобные типы, их можно определить в самом
____________________
# C++  можно купить  в AT&T,  Software Sales  and Marketing, PO Box
25000, Greensboro, NC 27420, USA (телефон 800-828-UNIX) или в ваших
местных организациях,  осуществляющих продажу  Системы UNIX. (прим.
автора)

                             - стр 12 -

языке. По  сути дела,  основное, чем занимается программирование на
C++, - это определение универсальных и специально-прикладных типов.
Хорошо разработанный тип, определенный пользователем, отличается от
встроенного  типа  только  способом  определения,  но  не  способом
использования.
  Исключались те  черты, которые  могли бы  повлечь  дополнительные
расходы памяти или времени выполнения. Например, мысли о том, чтобы
сделать  необходимым   храние  в   каждом  объекте  "хозяйственной"
информации, были отвергнуты; если пользователь описывает структуру,
состоящую из двух 16-битовых величин, то структура поместится в 32-
битовый регистр.
  C++ проектировался  для  использования  в  довольно  традиционной
среде компиляции  и  выполнения,  среде  программирования  на  C  в
системе UNIX.  Средства обработки  особых ситуаций  и параллельного
программирования, требующие  нетривиальной загрузки  и поддержки  в
процессе выполнения,  не были  включены  в  C++.  Вследствие  этого
реализация C++ очень легко переносима. Однако есть полные основания
использовать C++  в среде,  где имеется  гораздо более существенная
поддержка. Такие  средства, как  динамическая  загрузка,  пошаговая
трансляция  и   база  данных  определений  типов  могут  с  пользой
применяться без воздействия на язык.
  Типы и  средства скрытия  данных в C++ опираются на проводимый во
время компиляции  анализ программ с целью предотвращения случайного
искажения данных.  Они не  обеспечивают секретности  или защиты  от
умышленного  нарушения   правил.  Однако     эти   средства   можно
использовать без  ограничений, что  не  приводит  к  дополнительным
расходам времени на выполнение или пространства памяти.

     Исторические замечания

  Безусловно, C++ восходит главным образом к C [7]. C сохранено как
подможество, поэтому  сделанного в  C акцента  на средствах низкого
уровня достаточно,  чтобы справляться  с самыми  насущными задачами
системного программирования.  C, в  свою  очередь,  многим  обязано
своему предшественнику  BCPL [9];  на самом  деле,  комментарии  //
(заново) введены  в C++  из  BCPL.  Если  вы  знаете  BCPL,  то  вы
заметите,  что  в  C++  по-прежнему  нет  VALOF  блока.  Еще  одним
источником вдохновения  послужил язык  Simula67 [2,3]; из него была
позаимствована концепция  класса (вместе  с производными классами и
функциями  членами).   Это  было   сделано,  чтобы   способствовать
модульности через  использование виртуальных  функций.  Возможности
C++ по перегрузке операций и свобода в расположении описаний везде,
где может встречаться оператор, похожи на Алгол68 [14].
  Название C++  - изобретение совсем недавнее (лета 1983его). Более
ранние  версии  языка  использовались  начиная  с  1980ого  и  были
известны как  "C  с  Классами".  Первоначально  язык  был  придуман
потому, что  автор хотел написать модели, управляемые прерываниями,
для чего  был бы  идеален Simula67,  если не  принимать во внимание
эффективность. "C  с Классами" использовался  для  крупных проектов
моделирования,  в   которых    строго   тестировались   возможности
написания программ,  требующих минимального  (только)  пространства
памяти и  времени на  выполнение.  В  "C  с  Классами"  не  хватало
перегрузки операций,  ссылок, виртуальных функций и многих деталей.
C++ был впервые введен за пределами исследовательской группы автора

                             - стр 13 -

в июле  1983его; однако  тогда многие  особенности C++  были еще не
придуманы.
  Название  C++   выдумал  Рик   Масситти.  Название  указывает  на
эволюционную природу  перехода к  нему от  C. "++"  - это  операция
приращения в  C. Чуть более короткое имя C+ является синтаксической
ошибкой; кроме  того, оно  уже было использовано как совсем другого
языка. Знатоки семантики C находят, что C++ хуже, чем ++C. Названия
D язык  не получил,  поскольку он является расширением C и в нем не
делается  попыток   исцеляться  от   проблем   путем   выбрасывания
различных особенностей.  Еще одну  интерпретацию названия C++ можно
найти в приложении к Оруэллу [8].
  Изначально C++  был разработан,  чтобы автору  и его  друзьям  не
приходилось программировать на ассемблере, C или других современных
языках высокого  уровня. Основным  его предназначением было сделать
Предыдущая страница Следующая страница
1 2  3 4 5 6 7 8 9 10 11 12 13 14 ... 50
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (4)

Реклама