﻿<?php
echo "<p class=MsoToc1><span\n";
echo "class=MsoHyperlink><a href=\"#_Toc219967874\">Предисловие<span style='color:windowtext;\n";
echo "display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>9</span></a></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><span style='font-variant:normal !important;\n";
echo "text-transform:uppercase'><a href=\"#_Toc219967875\">Заметки для Читателя<span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>10</span></a></span></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><span style='font-variant:normal !important;\n";
echo "text-transform:uppercase'><a href=\"#_Toc219967876\">Структура Этой Книги<span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>10</span></a></span></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><span style='font-variant:normal !important;\n";
echo "text-transform:uppercase'><a href=\"#_Toc219967877\">Замечания по Реализации<span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>11</span></a></span></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><span style='font-variant:normal !important;\n";
echo "text-transform:uppercase'><a href=\"#_Toc219967878\">Упражнения<span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>11</span></a></span></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><span style='font-variant:normal !important;\n";
echo "text-transform:uppercase'><a href=\"#_Toc219967879\">Замечания по Проекту Языка<span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>12</span></a></span></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><span style='font-variant:normal !important;\n";
echo "text-transform:uppercase'><a href=\"#_Toc219967880\">Исторические Замечания<span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>13</span></a></span></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><span style='font-variant:normal !important;\n";
echo "text-transform:uppercase'><a href=\"#_Toc219967881\">Эффективность и Структура<span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>14</span></a></span></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><span style='font-variant:normal !important;\n";
echo "text-transform:uppercase'><a href=\"#_Toc219967882\">Философские Замечания<span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>16</span></a></span></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><span style='font-variant:normal !important;\n";
echo "text-transform:uppercase'><a href=\"#_Toc219967883\">Размышления о Программировании\n";
echo "на С++<span style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>16</span></a></span></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><span style='font-variant:normal !important;\n";
echo "text-transform:uppercase'><a href=\"#_Toc219967884\">Правила Правой Руки*<span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>18</span></a></span></span></p>\n";
echo "\n";
echo "<p class=menu><span class=MsoHyperlink><span style='font-variant:normal !important;\n";
echo "text-transform:uppercase'><a href=\"#_Toc219967885\">Замечания для Программистов\n";
echo "на C<span style='color:windowtext;display:none;text-decoration:none'>_ </span><span\n";
echo "style='color:windowtext;display:none;text-decoration:none'>19</span></a></span></span></p>\n";
echo "\n";
echo "<h1><a name=\"_Toc219967874\">Предисловие</a></h1>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:158.4pt;margin-bottom:.0001pt;text-indent:19.8pt;text-autospace:\n";
echo "none'>Язык формирует наш способ мышления и определяет, о чем мы можем мыслить.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:330.0pt;text-autospace:none'></p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>С++ - это универсальный язык программирования,\n";
echo "задуман­ный так, чтобы сделать программирование более приятным для серьезного\n";
echo "программиста. За исключением второстепенных дета­лей С++ является надмножеством\n";
echo "языка программирования C. По­мимо возможностей, которые дает C, С++\n";
echo "предоставляет гибкие и эффективные средства определения новых типов. Используя\n";
echo "опре­деления новых типов, точно отвечающих концепциям приложения, программист\n";
echo "может разделять разрабатываемую программу на лег­ко поддающиеся контролю части.\n";
echo "Такой метод построения прог­рамм часто называют абстракцией данных. Информация\n";
echo "о типах содержится в некоторых объектах типов, определенных пользова­телем.\n";
echo "Такие объекты просты и надежны в использовании в тех ситуациях, когда их тип\n";
echo "нельзя установить на стадии компиля­ции. Программирование с применением таких\n";
echo "объектов часто на­зывают объектно-ориентированным. При правильном использовании\n";
echo "этот метод дает более короткие, проще понимаемые и легче контролируемые\n";
echo "программы.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Ключевым понятием С++ является класс. Класс - это тип,\n";
echo "определяемый пользователем. Классы обеспечивают сокрытие дан­ных, гарантированную\n";
echo "инициализацию данных, неявное преобразо­вание типов для типов, определенных\n";
echo "пользователем, динамичес­кое задание типа, контролируемое пользователем\n";
echo "управление памятью и механизмы перегрузки операций. С++ предоставляет гораздо\n";
echo "лучшие, чем в C, средства выражения модульности прог­раммы и проверки типов. В\n";
echo "языке есть также усовершенствова­ния, не связанные непосредственно с классами,\n";
echo "включающие в себя символические константы, inline-подстановку функций, па­раметры\n";
echo "функции по умолчанию, перегруженные имена функций, операции управления\n";
echo "свободной памятью и ссылочный тип. В С++ сохранены возможности языка C по\n";
echo "работе с основными объектами аппаратного обеспечения (биты, байты, слова,\n";
echo "адреса и т.п.). Это позволяет весьма эффективно реализовывать типы, определя­емые\n";
echo "пользователем.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>С++ и его стандартные библиотеки спроектированы так, чтобы\n";
echo "обеспечивать переносимость. Имеющаяся на текущий момент реализация языка будет\n";
echo "идти в большинстве систем, поддержива­ющих C. Из С++ программ можно\n";
echo "использовать C библиотеки, и с С++ можно использовать большую часть\n";
echo "инструментальных средств, поддерживающих программирование на C.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Эта книга предназначена главным образом для того, чтобы\n";
echo "помочь серьезным программистам изучить язык и применять его в нетривиальных\n";
echo "проектах. В ней дано полное описание С++, много примеров и еще больше\n";
echo "фрагментов программ.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>Благодарности</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>С++ никогда бы не созрел без постоянного\n";
echo "использования, предложений и конструктивной критики со стороны многих друзей и\n";
echo "коллег. Том Карджилл, Джим Коплин, Сту Фельдман, Сэнди Фре­зер, Стив Джонсон,\n";
echo "Брайэн Керниган, Барт Локанти, Дуг МакИл­рой, Дэннис Риччи, Лэрри Рослер,\n";
echo "Джерри Шварц и Джон Шопиро подали важные для развития языка идеи. Дэйв Пресотто\n";
echo "написал текущую реализацию библиотеки потоков ввода/вывода.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Кроме того, в развитие С++ внесли свой вклад сотни лю­дей,\n";
echo "которые присылали мне предложения по усовершенствованию, описания трудностей, с\n";
echo "которыми они сталкивались, и ошибки компилятора. Здесь я могу упомянуть лишь\n";
echo "немногих из них: Гэ­ри Бишоп, Эндрю Хьюм, Том Карцес, Виктор Миленкович, Роб\n";
echo "Мюр­рэй, Леони Росс, Брайэн Шмальт и Гарри Уокер.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>В издании этой книги мне помогли многие люди, в частнос­ти,\n";
echo "Джон Бентли, Лаура Ивс, Брайэн Керниган, Тэд Ковальски, Стив Махани, Джон\n";
echo "Шопиро и участники семинара по С++, который проводился в Bell Labs, Колумбия,\n";
echo "Огайо, 26-27 июня 1985 го­да.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "119.7pt;margin-left:138.6pt;text-autospace:none'>Мюррэй Хилл, Нью Джерси Бьярн\n";
echo "Страустрап </p>\n";
echo "\n";
echo "<h2><a name=\"_Toc219967875\">Заметки для Читателя</a></h2>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:158.4pt;margin-bottom:.0001pt;text-autospace:none'>&quot;О\n";
echo "многом,&quot; - молвил Морж, - &quot;Пришла</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:283.8pt;margin-bottom:.0001pt;text-autospace:none'>пора\n";
echo "поговорить.&quot;</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:323.4pt;text-autospace:none'>- Л. Кэррол</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>В этой главе содержится обзор книги, список\n";
echo "библиографи­ческих ссылок и некоторые замечания по С++ вспомогательного\n";
echo "характера. Замечания касаются истории С++, идей, оказавших влияние на\n";
echo "разработку С++, и мыслей по поводу программирова­ния на С++. Эта глава не\n";
echo "является введением: замечания не обязательны для понимания последующих глав, и\n";
echo "некоторые из них предполагают знание С++.</p>\n";
echo "\n";
echo "<h2><a name=\"_Toc219967876\">Структура Этой Книги</a></h2>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Глава 1 - это короткое турне по основным\n";
echo "особенностям С+ +, предназначенное для того, чтобы дать читателю почувство­вать\n";
echo "язык. Программисты на C первую половину главы могут про­читать очень быстро,\n";
echo "она охватывает главным образом черты, общие для C и С++. Во второй главе\n";
echo "описаны средства определе­ния новых типов в С++, начинающие могут отложить\n";
echo "более под­робное изучение этого до того, как прочтут Главы 2, 3 и 4.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>В Главах 2, 3 и 4 описываются средства С++, не входящие в\n";
echo "определение новых типов: основные типы, выражения и струк­туры управления в С++\n";
echo "программах. Другими словами, в них опи­сывается подмножество С++, которое по\n";
echo "существу является язы­ком C. Рассмотрение в них проводится гораздо подробнее,\n";
echo "но полную информацию можно найти только в справочном руководс­тве.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>В Главах 5, 6 и 7 описываются средства С++ по описанию\n";
echo "новых типов, особенности языка, не имеющие эквивалента в C. В Главе 5\n";
echo "приводится понятие базового класса, и показывается, как можно инициализировать\n";
echo "объекты типа, определяемого поль­зователем, обращаться к ним и, наконец,\n";
echo "убирать их. В Главе 6 объясняется, как для определяемого пользователем типа\n";
echo "опреде­лять унарные и бинарные операции, как задавать преобразования между\n";
echo "типами, определяемыми пользователем, и как как задавать то, каким образом\n";
echo "должно обрабатываться каждое создание, уничтожение и копирование значения\n";
echo "определяемого пользовате­лем типа. Глава 7 описывает концепцию производных\n";
echo "классов, которая позволяет программисту строить более сложные классы из более\n";
echo "простых, обеспечивать альтернативные интерфейсы класса и работать с объектами\n";
echo "эффективно и с гарантией типа в тех ситуациях, когда типы объектов не могут\n";
echo "быть известны на стадии компиляции.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>В Главе 8 представлены классы ostream и istream, предос­тавляемые\n";
echo "стандартной библиотекой для осуществления ввода-вы­вода. Эта глава имеет\n";
echo "двоякую цель: в ней представлены полез­ные средства, что одновременно является\n";
echo "реальным примером использования С++.</p>\n";
echo "\n";
echo "<p class=MsoNormal align=center style='margin-top:13.3pt;margin-right:10.55pt;\n";
echo "margin-bottom:13.3pt;margin-left:0cm;text-align:center;text-autospace:none'>И,\n";
echo "наконец, в книгу включено справочное руководство по С++.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Ссылки на различные части этой книги даются в форме\n";
echo "#2.3.4 (Глава 2 подраздел 3.4). Глава с - это справочное ру­ководство например\n";
echo "#с.8.5.5.</p>\n";
echo "\n";
echo "<h2><a name=\"_Toc219967877\">Замечания по Реализации</a></h2>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-align:justify;text-indent:33.0pt;text-autospace:\n";
echo "none'>Во время написания этой книги все реализации С++ исполь­зовали версии\n";
echo "единственного интерфейсного компилятора*. Он используется на многих\n";
echo "архитектурах, включая действующие вер­сии системы операционной системы UNIX на\n";
echo "AT&amp;T 3B, DEC VAX, IBM 370 и Motorolla 68000. Фрагменты программ, которые\n";
echo "приво­дятся в этой книге, взяты непосредственно из исходных файлов, которые\n";
echo "компилировались на 3B в UNIX System V версии 2 [15], VAX11/750 под 8-ой\n";
echo "Редакцией UNIX [16] и CCI Power 6/32 под BSD4.2 UNIX [17]. Язык, описанный в\n";
echo "этой книге, - это &quot;чистый С++&quot;, но имеющиеся на текущий момент\n";
echo "компиляторы реализуют большое число &quot;анахронизмов&quot; (описанных в\n";
echo "#с.15.3), которые должны способствовать переходу от C к С++.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-autospace:none'>--------------------</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>* С++ можно купить в AT&amp;T, Software Sales and\n";
echo "Marketing, PO Box 25000, Greensboro, NC 27420, USA (телефон 800-828-UNIX) или в\n";
echo "ваших местных организациях, осуществляю­щих продажу Системы UNIX. (прим.\n";
echo "автора)</p>\n";
echo "\n";
echo "<h2><a name=\"_Toc219967878\">Упражнения</a></h2>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Упражнения находятся в конце глав. Все упражнения\n";
echo "глав­ным образом типа напишите-программу. Для решения всегда пиши­те такую программу,\n";
echo "которая будет компилироваться и работать по меньшей мере на нескольких тестовых\n";
echo "случаях. Упражнения различаются в основном по сложности, поэтому они помечены\n";
echo "оценкой степени сложности. Шкала экспоненциальная, так что если на упражнение\n";
echo "(*1) вам потребовалось пять минут, то на упражнение (*2) вам может\n";
echo "потребоваться час, а на (*3) - день. Время, которое требуется на то, чтобы\n";
echo "написать и оттес­тировать программу, зависит больше от опыта читателя, нежели\n";
echo "от самого упражнения. Упражнение (*1) может отнять день, если для того, чтобы\n";
echo "запустить ее, читателю сначала придется зна­комиться с новой вычислительной\n";
echo "системой. С другой стороны, тот, у кого под рукой окажется нужный набор\n";
echo "программ, может сделать упражнение (*5) за час. В качестве источника упражне­ний\n";
echo "к Главам 2-4 можно использовать любую книгу по C. У Ахо и др. [1] приведено\n";
echo "большое количество общих структур данных и алгоритмов в терминах абстрактных\n";
echo "типов данных. Эту книгу также может служить источником упражнений к Главам 5-7.\n";
echo "Одна­ко языку, который в этой книге использовался, недостает как функций\n";
echo "членов, так и производных классов. Поэтому определяе­мые пользователем типы\n";
echo "часто можно выражать в С++ более эле­гантно.</p>\n";
echo "\n";
echo "<h2><a name=\"_Toc219967879\">Замечания по Проекту Языка</a></h2>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Существенным критерием при разработке языка была\n";
echo "просто­та. Там, где возникал выбор между упрощением руководства по языку и\n";
echo "другой документации и упрощением компилятора, выбира­лось первое. Огромное\n";
echo "значение также предавалось совместимос­ти с C, это помешало удалить синтаксис\n";
echo "C.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>В С++ нет типов данных высокого уровня и нет первичных\n";
echo "операций высокого уровня. В нем нет, например, матричного ти­па с операцией\n";
echo "обращения или типа строка с операцией конкате­нации. Если пользователю\n";
echo "понадобятся подобные типы, их можно определить в самом языке. По сути дела,\n";
echo "основное, чем занима­ется программирование на С++ - это определение\n";
echo "универсальных и специально-прикладных типов. Хорошо разработанный тип, оп­ределяемый\n";
echo "пользователем, отличается от встроенного типа только способом определения, но\n";
echo "не способом использования.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Исключались те черты, которые могли бы повлечь дополни­тельные\n";
echo "расходы памяти или времени выполнения. Например, мыс­ли о том, чтобы сделать\n";
echo "необходимым хранение в каждом объекте &quot;хозяйственной&quot; информации,\n";
echo "были отвергнуты. Если пользова­тель описывает структуру, состоящую из двух\n";
echo "16-битовых вели­чин, то структура поместится в 32-битовый регистр.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>С++ проектировался для использования в довольно традици­онной\n";
echo "среде компиляции и выполнения, среде программирования на C в системе UNIX.\n";
echo "Средства обработки особых ситуаций и па­раллельного программирования, требующие\n";
echo "нетривиальной загруз­ки и поддержки в процессе выполнения, не были включены в\n";
echo "С++. Вследствие этого реализация С++ очень легко переносима. Одна­ко есть\n";
echo "полные основания использовать С++ в среде, где имеет­ся гораздо более\n";
echo "существенная поддержка. Такие средства, как динамическая загрузка, пошаговая\n";
echo "трансляция и база данных оп­ределений типов могут с пользой применяться без\n";
echo "воздействия на язык.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Типы и средства сокрытия данных в С++ опираются на про­водимый\n";
echo "во время компиляции анализ программ с целью предотв­ращения случайного\n";
echo "искажения данных. Они не обеспечивают сек­ретности или защиты от умышленного\n";
echo "нарушения правил. Однако эти средства можно использовать без ограничений, что\n";
echo "не при­водит к дополнительным расходам времени на выполнение или пространства\n";
echo "памяти.</p>\n";
echo "\n";
echo "<h2><a name=\"_Toc219967880\">Исторические Замечания</a></h2>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Безусловно, С++ восходит главным образом к C [7]. C\n";
echo "сох­ранен как подможество, поэтому сделанного в C акцента на средствах низкого\n";
echo "уровня достаточно, чтобы справляться с са­мыми насущными задачами системного\n";
echo "программирования. C, в свою очередь, многим обязан своему предшественнику BCPL\n";
echo "[9]. На самом деле, комментарии // (заново) введены в С++ из BCPL. Если вы\n";
echo "знаете BCPL, то вы заметите, что в С++ по-прежнему нет VALOF блока. Еще одним источником\n";
echo "вдохновения послужил язык Simula67 [2,3], из него была позаимствована концепция\n";
echo "класса (вместе с производными классами и функциями членами). Это было сделано,\n";
echo "чтобы способствовать модульности через ис­пользование виртуальных функций.\n";
echo "Возможности С++ по перегруз­ке операций и свобода в расположении описаний\n";
echo "везде, где мо­жет встречаться оператор, похожи на Алгол68 [14].</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Название С++ - изобретение совсем недавнее (лета\n";
echo "1983-его). Более ранние версии языка использовались начиная с 1980-ого и были\n";
echo "известны как &quot;C с Классами&quot;. Первоначально язык был придуман потому,\n";
echo "что автор хотел написать событийно управляемые модели для чего был бы идеален\n";
echo "Simula67, если не принимать во внимание эффективность. &quot;C с Классами&quot;\n";
echo "использо­вался для крупных проектов моделирования, в которых строго\n";
echo "тестировались возможности написания программ, требующих (только) минимального\n";
echo "пространства памяти и времени на выпол­нение. В &quot;C с Классами&quot; не\n";
echo "хватало перегрузки операций, ссы­лок, виртуальных функций и многих деталей. С++\n";
echo "был впервые введен за пределами исследовательской группы автора в июле 1983го.\n";
echo "Однако тогда многие особенности С++ были еще не при­думаны.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Название С++ выдумал Рик Масситти. Название указывает на\n";
echo "эволюционную природу перехода к нему от C. &quot;++&quot; - это опера­ция приращения\n";
echo "в C. Чуть более короткое имя C+ является син­таксической ошибкой, кроме того,\n";
echo "оно уже было использовано как имя совсем другого языка. Знатоки семантики C\n";
echo "находят, что С++ хуже, чем ++C. Названия D язык не получил, поскольку он\n";
echo "является расширением C и в нем не делается попыток исце­литься от проблем путем\n";
echo "выбрасывания различных особенностей. Еще одну интерпретацию названия С++ можно\n";
echo "найти в приложении к Оруэллу [8].</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Изначально С++ был разработан, чтобы автору и его друзь­ям\n";
echo "не приходилось программировать на ассемблере, C или других современных языках\n";
echo "высокого уровня. Основным его предназначе­нием было сделать написание хороших\n";
echo "программ более простым и приятным для отдельного программиста. Плана разработки\n";
echo "С++ на бумаге никогда не было. Проект, документация и реализация двигались\n";
echo "одновременно. Разумеется, внешний интерфейс С++ был написан на С++. Никогда не\n";
echo "существовало &quot;Проекта С++&quot; и &quot;Ко­митета по разработке С++&quot;.\n";
echo "Поэтому С++ развивался и продолжа­ет развиваться во всех направлениях, чтобы\n";
echo "справляться со сложностями, с которыми сталкиваются пользователи, а также в\n";
echo "процессе дискуссий автора с его друзьями и коллегами.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>В качестве базового языка для С++ был выбран C, потому что\n";
echo "он</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>[1] многоцелевой, лаконичный и\n";
echo "относительно низкого уровня,</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>[2] отвечает большинству задач\n";
echo "системного программирования,</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>[3] идет везде и на всем и</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>[4] пригоден в среде\n";
echo "программирования UNIX.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>В C есть свои сложности, но в наспех\n";
echo "спроектированном языке тоже были бы свои, а сложности C нам известны. Самое\n";
echo "главное, работа с C позволила &quot;C с Классами&quot; быть полезным (правда,\n";
echo "неудобным) инструментом в ходе первых месяцев разду­мий о добавлении к C\n";
echo "Simula-подобных классов.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>С++ стал использоваться шире, и по мере того, как воз­можности,\n";
echo "предоставляемые им помимо возможностей C, станови­лись все более существенными,\n";
echo "вновь и вновь поднимался вопрос о том, сохранять ли совместимость с C. Ясно,\n";
echo "что отказавшись от определенной части наследия C можно было бы избежать ряда\n";
echo "проблем (см., например, Сэти [12]). Это не было сделано, по­тому что</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>[1] есть миллионы строк на C, которые могли бы принести\n";
echo "пользу в С++ при условии, что их не нужно было бы полностью переписывать с C на\n";
echo "С++,</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>[2] есть сотни тысяч строк библиотечных функций и сер­висных\n";
echo "программ, написанных на C, которые можно было бы ис­пользовать из или на С++\n";
echo "при условии, что С++ полностью сов­местим с C по загрузке и синтаксически очень\n";
echo "похож на C,</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>[3] есть десятки тысяч программистов, которые знают C, и\n";
echo "которым, поэтому, нужно только научиться использовать новые особенности С++, а\n";
echo "не заново изучать его основы и</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>[4] поскольку С++ и C будут использоваться на одних и тех\n";
echo "же системах одними и теми же людьми, отличия должны быть либо очень большими,\n";
echo "либо очень маленькими, чтобы свести к минимуму ошибки и недоразумения.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Позднее была проведена проверка определения С++, чтобы\n";
echo "удостовериться в том, что любая конструкция, допустимая и в C и в С++,\n";
echo "действительно означает в обоих языках одно и то же.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Язык C сам эволюционировал за последние несколько\n";
echo "лет, частично под влиянием развития С++ (см. Ростлер [11]). Пред­варительный\n";
echo "грубый ANSI стандарт C [10] содержит синтаксис описаний функций, заимствованный\n";
echo "из &quot;C с Классами&quot;. Заимство­вание идей идет в обе стороны. Например,\n";
echo "указатель void* был придуман для ANSI C и впервые реализован в С++. Когда ANSI\n";
echo "стандарт разовьется несколько дальше, придет время пересмот­реть С++, чтобы\n";
echo "удалить необоснованную несовместимость. Бу­дет, например, модернизирован\n";
echo "препроцессор (#с.11), и нужно будет, вероятно, отрегулировать правила\n";
echo "выполнения плавающей арифметики. Это не должно оказаться болезненным, и C и\n";
echo "ANSI C очень близки к тому, чтобы стать подмножествами С++ (см. #с.11).</p>\n";
echo "\n";
echo "<h2><a name=\"_Toc219967881\">Эффективность и Структура</a></h2>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>С++ был развит из языка программирования C и за\n";
echo "очень немногими исключениями сохраняет C как подмножество. Базовый язык, C подмножество\n";
echo "С++, спроектирован так, что имеется очень близкое соответствие между его\n";
echo "типами, операциями и операторами и компьютерными объектами, с которыми\n";
echo "непосредс­твенно приходится иметь дело: числами, символами и адресами. За\n";
echo "исключением операций свободной памяти new и delete, от­дельные выражения и\n";
echo "операторы С++ обычно не нуждаются в скры­той поддержке во время выполнения или\n";
echo "подпрограммах.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>В С++ используются те же последовательности вызова и\n";
echo "возврата из функций, что и в C. В тех случаях, когда даже этот довольно\n";
echo "эффективный механизм является слишком дорогим, С++ функция может быть\n";
echo "подставлена inline, удовлетворяя, та­ким образом, соглашению о записи функций\n";
echo "без дополнительных расходов времени выполнения.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Одним из первоначальных предназначений C было применение\n";
echo "его вместо программирования на ассемблере в самых насущных задачах системного\n";
echo "программирования. Когда проектировался С++, были приняты меры, чтобы не ставить\n";
echo "под угрозу успехи в этой области. Различие между C и С++ состоит в первую\n";
echo "очередь в степени внимания, уделяемого типам и структурам. C вырази­телен и\n";
echo "снисходителен. С++ еще более выразителен, но чтобы достичь этой\n";
echo "выразительности, программист должен уделить больше внимания типам объектов.\n";
echo "Когда известны типы объектов, компилятор может правильно обрабатывать\n";
echo "выражения, тогда как в противном случае программисту пришлось бы задавать\n";
echo "действия с мучительными подробностями. Знание типов объектов также позволяет\n";
echo "компилятору обнаруживать ошибки, которые в против­ном случае остались бы до\n";
echo "тестирования. Заметьте, что исполь­зование системы типов для того, чтобы\n";
echo "получить проверку пара­метров функций, защитить данные от случайного искажения,\n";
echo "задать новые операции и т.д., само по себе не увеличивает расходов по времени\n";
echo "выполнения и памяти.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Особое внимание, уделенное при разработке С++ структуре,\n";
echo "отразилось на возрастании масштаба программ, написанных со времени разработки\n";
echo "C. Маленькую программу (меньше 1000 строк) вы можете заставить работать с\n";
echo "помощью грубой силы, даже на­рушая все правила хорошего стиля. Для программ\n";
echo "больших разме­ров это не совсем так. Если программа в 10 000 строк имеет плохую\n";
echo "структуру, то вы обнаружите, что новые ошибки появля­ются так же быстро, как\n";
echo "удаляются старые. С++ был разработан так, чтобы дать возможность разумным\n";
echo "образом структурировать большие программы таким образом, чтобы для одного\n";
echo "человека не было непомерным справляться с программами в 25 000 строк. Су­ществуют\n";
echo "программы гораздо больших размеров, однако те, кото­рые работают, в целом, как\n";
echo "оказывается, состоят из большого числа почти независимых частей, размер каждой\n";
echo "из которых нам­ного ниже указанных пределов. Естественно, сложность написа­ния\n";
echo "и поддержки программы зависит от сложности разработки, а не просто от числа\n";
echo "строк текста программы, так что точные цифры, с помощью которых были выражены\n";
echo "предыдущие соображе­ния, не следует воспринимать слишком серьезно.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Не каждая часть программы, однако, может быть хорошо\n";
echo "структурирована, независима от аппаратного обеспечения, легко читаема и т.п.\n";
echo "С++ обладает возможностями, предназначенными для того, чтобы непосредственно и\n";
echo "эффективно работать с аппа­ратными средствами, не заботясь о безопасности или\n";
echo "простоте понимания. Он также имеет возможности, позволяющие скрывать такие\n";
echo "программы за элегантными и надежными интерфейсами.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>В этой книге особый акцент делается на методах создания\n";
echo "универсальных средств, полезных типов, библиотек и т.д. Эти средства пригодятся\n";
echo "как тем программистам, которые пишут не­большие программы, так и тем, которые\n";
echo "пишут большие. Кроме того, поскольку все нетривиальные программы состоят из\n";
echo "боль­шого числа полунезависимых частей, методы написания таких частей\n";
echo "пригодятся и системным, и прикладным программистам.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>У кого-то может появиться подозрение, что спецификация\n";
echo "программы с помощью более подробной системы типов приведет к увеличению\n";
echo "исходных текстов программы. В С++ это не так. С++ программа, описывающая типы\n";
echo "параметров функций, использующая классы и т.д., обычно немного короче\n";
echo "эквивалентной C програм­мы, в которой эти средства не используются.</p>\n";
echo "\n";
echo "<h2><a name=\"_Toc219967882\">Философские Замечания</a></h2>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Язык программирования служит двум связанным между\n";
echo "собой целям: он дает программисту аппарат для задания действий, ко­торые должны\n";
echo "быть выполнены, и формирует концепции, которыми пользуется программист,\n";
echo "размышляя о том, что делать. Первой цели идеально отвечает язык, который\n";
echo "настолько &quot;близок к ма­шине&quot;, что всеми основными машинными аспектами\n";
echo "можно легко и просто оперировать достаточно очевидным для программиста об­разом.\n";
echo "С таким умыслом первоначально задумывался C. Второй цели идеально отвечает\n";
echo "язык, который настолько &quot;близок к ре­шаемой задаче&quot;, чтобы концепции\n";
echo "ее решения можно было выра­жать прямо и коротко. С таким умыслом предварительно\n";
echo "задумы­вались средства, добавленные к C для создания С++.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Связь между языком, на котором мы думаем/программируем, и\n";
echo "задачами и решениями, которые мы можем представлять в своем воображении, очень\n";
echo "близка. По этой причине ограничивать свойства языка только целями исключения\n";
echo "ошибок программиста в лучшем случае опасно. Как и в случае с естественными\n";
echo "языками, есть огромная польза быть по крайней мере двуязычным. Язык\n";
echo "предоставляет программисту набор концептуальных инструментов, если они не\n";
echo "отвечают задаче, то их просто игнорируют. Напри­мер, серьезные ограничения\n";
echo "концепции указателя заставляют программиста применять вектора и целую\n";
echo "арифметику, чтобы реа­лизовать структуры, указатели и т.п. Хорошее\n";
echo "проектирование и отсутствие ошибок не может гарантироваться чисто за счет язы­ковых\n";
echo "средств.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-indent:33.0pt;text-autospace:\n";
echo "none'>Система типов должна быть особенно полезна в нетривиаль­ных задачах. \n";
echo "Действительно, концепция классов в С++ показала себя мощным концептуальным\n";
echo "средством.</p>\n";
echo "\n";
echo "<h2><a name=\"_Toc219967883\">Размышления о Программировании на С++</a></h2>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>В идеальном случае подход к разработке программы\n";
echo "делится на три части: вначале получить ясное понимание задачи, потом выделить\n";
echo "ключевые идеи, входящие в ее решение, и наконец вы­разить решение в виде\n";
echo "программы. Однако подробности задачи и идеи решения часто становятся ясны\n";
echo "только в результате попыт­ки выразить их в виде программы - именно в этом\n";
echo "случае имеет значение выбор языка программирования.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>В большинстве разработок имеются понятия, которые трудно\n";
echo "представить в программе в виде одного из основных типов или как функцию без\n";
echo "ассоциированных с ней статических данных. Ес­ли имеется подобное понятие,\n";
echo "опишите класс, представляющий его в программе. Класс - это тип, это значит, что\n";
echo "он задает поведение объектов его класса: как они создаются, как может\n";
echo "осуществляться работа с ними, и как они уничтожаются. Класс также задает способ\n";
echo "представления объектов. Но на ранних ста­диях разработки программы это не\n";
echo "является (не должно являть­ся) главной заботой.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Ключом к написанию хорошей программы является\n";
echo "разработка таких классов, чтобы каждый из них представлял одно основное\n";
echo "понятие. Обычно это означает, что программист должен сосредо­точиться на\n";
echo "вопросах: Как создаются объекты этого класса? Мо­гут ли эти объекты\n";
echo "копироваться и/или уничтожаться? Какие действия можно производить над этими\n";
echo "объектами? Если на такие вопросы нет удовлетворительных ответов, то во-первых,\n";
echo "скорее всего, понятие не было &quot;ясно&quot;, и может быть неплохо еще нем­ного\n";
echo "подумать над задачей и предлагаемым решением, вместо то­го, чтобы сразу\n";
echo "начинать &quot;программировать&quot; сложности.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Проще всего иметь дело с такими понятиями, которые имеют\n";
echo "традиционную математическую форму: числа всех видов, множест­ва, геометрические\n";
echo "фигуры и т.п. На самом деле, следовало бы иметь стандартные библиотеки классов,\n";
echo "представляющих такие понятия, но к моменту написания это не имело места. С++\n";
echo "еще молод, и его библиотеки не развились еще до той же степени, что и сам язык.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Понятие не существует в пустоте, всегда есть группы свя­занных\n";
echo "между собой понятий. Организовать в программе взаимо­отношения между классами,\n";
echo "то есть определить точную взаимос­вязь между различными понятиями, часто\n";
echo "труднее, чем сначала спланировать отдельные классы. Лучше, чтобы не получилось\n";
echo "не­разберихи, когда каждый класс (понятие) зависит от всех ос­тальных.\n";
echo "Рассмотрим два класса, A и B. Взаимосвязи вроде &quot;A вызывает функции из\n";
echo "B&quot;, &quot;A создает объекты B&quot; и &quot;A имеет чле­ны B&quot; редко\n";
echo "вызывают большие сложности, а взаимосвязь вроде &quot;A использует данные из\n";
echo "B&quot; обычно можно исключить (просто не используйте открытые данные-члены).\n";
echo "Неприятными, как правило, являются взаимосвязи, которые по своей природе имеют\n";
echo "вид &quot;A есть B и ...&quot;.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Одним из наиболее мощных интеллектуальных средств, поз­воляющих\n";
echo "преодолевать сложность, является иерархическое упо­рядочение, то есть\n";
echo "организация связанных между собой понятий в древовидную структуру с самым общим\n";
echo "понятием в корне. В С++ такие структуры представляются производными классами.\n";
echo "Часто можно организовать программу как множество деревьев (лес?). То есть,\n";
echo "программист задает множество базовых классов, каждый из которых имеет свое\n";
echo "собственное множество производных клас­сов. Для определения набора действий для\n";
echo "самой общей интерп­ретации понятия (базового класса) часто можно использовать\n";
echo "виртуальные функции (#7.2.8). Интерпретацию этих действий можно, в случае\n";
echo "необходимости, усовершенствовать для отдель­ных специальных классов\n";
echo "(производных классов).</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Естественно, такая организация имеет свои ограничения. В\n";
echo "частности, множество понятий иногда лучше организуется в виде ациклического\n";
echo "графа, в котором понятие может непосредственно зависеть от более чем одного\n";
echo "другого понятия, например, &quot;A есть B и C и ...&quot;. В С++ нет\n";
echo "непосредственной поддержки это­го, но подобные связи можно представить, немного\n";
echo "потеряв в элегантности и проделав малость дополнительной работы (#7.2.5).</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Иногда для организации понятий некоторой программы ока­зывается\n";
echo "непригоден даже ациклический граф, некоторые понятия оказываются\n";
echo "взаимозависимыми по своей природе. Если множество взаимозависимых классов\n";
echo "настолько мало, что его легко себе представить, то циклические зависимости не\n";
echo "должны вызвать сложностей. Для представления множеств взаимозависимых клас­сов\n";
echo "с С++ можно использовать идею friend классов (#5.4.1).</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Если вы можете организовать понятия программы только в\n";
echo "виде общего графа (не дерева или ациклического направленного графа), и если вы\n";
echo "не можете локализовать взаимные зависимос­ти, то вы, по всей видимости, попали\n";
echo "в затруднительное поло­жение, из которого вас не выручит ни один язык\n";
echo "программирова­ния. Если вы не можете представить какой-либо просто\n";
echo "формулируемой зависимости между основными понятиями, то ско­рее всего\n";
echo "справиться с программой не удастся.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Напомню, что большую часть программирования можно легко и\n";
echo "очевидно выполнять, используя только простые типы, структу­ры данных, обычные\n";
echo "функции и небольшое число классов из стан­дартной библиотеки. Весь аппарат,\n";
echo "входящий в определение но­вых типов, не следует использовать за исключением тех\n";
echo "случаев, когда он действительно нужен.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>Вопрос &quot;Как пишут хорошие программы на С++&quot;\n";
echo "очень похож на вопрос &quot;Как пишут хорошую английскую прозу?&quot; Есть два\n";
echo "вида ответов: &quot;Знайте, что вы хотите сказать&quot; и &quot;Практикуйтесь.\n";
echo "Подражайте хорошему языку.&quot; Оба совета оказываются подходящи­ми к С++ в\n";
echo "той же мере, сколь и для английского - и им столь же трудно следовать.</p>\n";
echo "\n";
echo "<h2><a name=\"_Toc219967884\">Правила Правой Руки*</a></h2>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-autospace:none'>--------------------</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-autospace:none'>* Некоторые\n";
echo "легко запоминаемые эмпирические правила. (прим.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-autospace:none'>перев.)</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-align:justify;text-indent:\n";
echo "33.0pt;text-autospace:none'>Здесь приводится набор правил, которых вам хорошо\n";
echo "бы придерживаться изучая С++. Когда вы станете более опытны, вы можете\n";
echo "превратить их в то, что будет подходить для вашего ро­да деятельности и вашего\n";
echo "стиля программирования. Они умышлен­но сделаны очень простыми, поэтому\n";
echo "подробности в них опущены. Не воспринимайте их чересчур буквально. Написание\n";
echo "хороших программ требует ума, вкуса и терпения. Вы не собираетесь как следует\n";
echo "понять это с самого начала, поэкспериментируйте!</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:0cm;margin-bottom:.0001pt;text-align:justify;text-indent:33.0pt;\n";
echo "text-autospace:none'>[1] Когда вы программируете, вы создаете конкретное\n";
echo "представление идей вашего решения некоторой задачи. Пусть структура отражает\n";
echo "эти идеи настолько явно, насколько это возможно:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>[a] Если вы\n";
echo "считаете &quot;это&quot; отдельным понятием, сделайте его</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:46.2pt;text-autospace:none'>классом.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:13.2pt;margin-bottom:.0001pt;text-autospace:none'>[b] Если вы\n";
echo "считаете &quot;это&quot; отдельным объектом, сделайте его</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:46.2pt;text-autospace:none'>объектом некоторого класса.</p>\n";
echo "\n";
echo "<p class=MsoNormal align=center style='margin-right:10.55pt;text-align:center;\n";
echo "text-autospace:none'>[c] Если два класса имеют общим нечто существенное,\n";
echo "сделайте</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>его базовым\n";
echo "классом. Почти все классы в вашей программе</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-autospace:none'>будут иметь\n";
echo "нечто общее. Заведите (почти) универсальный</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:39.6pt;text-autospace:none'>базовый класс, и разработайте\n";
echo "его наиболее тщательно.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-right:10.55pt;text-indent:33.0pt;text-autospace:\n";
echo "none'>[2] Когда вы определяете класс, который не реализует не­который\n";
echo "математический объект, вроде матрицы или комплексного числа, или тип низкого\n";
echo "уровня, вроде связанного списка, то:</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:6.6pt;text-autospace:none'>[a] Не используйте глобальные\n";
echo "данные.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:6.6pt;text-autospace:none'>[b] Не используйте глобальные\n";
echo "функции (не члены).</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:6.6pt;text-autospace:none'>[c] Не используйте открытые\n";
echo "данные-члены.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-align:justify;text-indent:\n";
echo "-33.0pt;text-autospace:none'>[d] Не используйте друзей, кроме как для того,\n";
echo "чтобы избе­жать [a], [b] или [c].</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:6.6pt;margin-bottom:.0001pt;text-autospace:none'>[e] Не\n";
echo "обращайтесь к данным-членам или другим объектам</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:39.6pt;text-autospace:none'>непосредственно.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:39.6pt;margin-bottom:.0001pt;text-align:justify;text-indent:\n";
echo "-33.0pt;text-autospace:none'>[f] Не помещайте в класс &quot;поле типа&quot;,\n";
echo "используйте виртуаль­ные функции.</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:13.3pt;margin-right:10.55pt;margin-bottom:\n";
echo "0cm;margin-left:6.6pt;margin-bottom:.0001pt;text-autospace:none'>[g] Не\n";
echo "используйте inline-функции, кроме как средство</p>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:39.6pt;text-autospace:none'>существенной оптимизации.</p>\n";
echo "\n";
echo "<h2><a name=\"_Toc219967885\">Замечания для Программистов на C</a></h2>\n";
echo "\n";
echo "<p class=MsoNormal style='margin-top:0cm;margin-right:10.55pt;margin-bottom:\n";
echo "13.3pt;margin-left:0cm;text-align:justify;text-indent:33.0pt;text-autospace:\n";
echo "none'>Чем лучше кто-нибудь знает C, тем труднее окажется избе­жать писания на\n";
echo "С++ в стиле C, теряя, тем самым, некоторые возможные выгоды С++. Поэтому\n";
echo "проглядите, пожалуйста, раздел &quot;Отличия от C&quot; в справочном\n";
echo "руководстве (#с.15). Там указыва­ются области, в которых С++ позволяет делать\n";
echo "что-то лучше, чем C. Макросы (#define) в С++ почти никогда не бывают необ­ходимы,\n";
echo "чтобы определять провозглашаемые константы, исполь­зуйте const (#2.4.6) или\n";
echo "enum (#2.4.7), и inline (#1.12) - чтобы избежать лишних расходов на вызов\n";
echo "функции. Старайтесь описывать все функции и типы всех параметров - есть очень\n";
echo "ма­ло веских причин этого не делать. Аналогично, практически нет причин описывать\n";
echo "локальную переменную не инициализируя ее, поскольку описание может появляться\n";
echo "везде, где может стоять оператор, - не описывайте переменную, пока она вам не\n";
echo "нужна. Не используйте malloc() - операция new (#3.2.6) делает ту же работу\n";
echo "лучше. Многие объединения не нуждаются в имени - ис­пользуйте безымянные\n";
echo "объединения (#2.5.2).</p>\n";
echo "\n";
?>