MoreKnig.org

C++: читать книгу онлайн полностью и бесплатно

Автор: Хилл Мюррей, Страустрап Бьярн



Шрифт:

Проще всего иметь дело с такими понятиями, которые имеют традиционную математическую форму: числа всех видов, множества, геометрические фигуры и т.п. На самом деле, следовало бы иметь стандартные библиотеки классов, представляющих такие понятия, но к моменту написания это не имело места. С++ еще молод, и его библиотеки не развились еще до той же степени, что и сам язык.

Понятие не существует в пустоте, всегда есть группы связанных между собой понятий. Организовать в программе взаимоотношения между классами, то есть определить точную взаимосвязь между различными понятиями, часто труднее, чем сначала спланировать отдельные классы. Лучше, чтобы не получилось неразберихи, когда каждый класс (понятие) зависит от всех остальных. Рассмотрим два класса, A и B. Взаимосвязи вроде «A вызывает функции из B», «A создает объекты B» и «A имеет члены B» редко вызывают большие сложности, а взаимосвязь вроде «A использует данные из B» обычно можно исключить (просто не используйте открытые данные-члены). Неприятными, как правило, являются взаимосвязи, которые по своей природе имеют вид «A есть B и ...».

Одним из наиболее мощных интеллектуальных средств, позволяющих преодолевать сложность, является иерархическое упорядочение, то есть организация связанных между собой понятий в древовидную структуру с самым общим понятием в корне. В С++ такие структуры представляются производными классами. Часто можно организовать программу как множество деревьев (лес?). То есть, программист задает множество базовых классов, каждый из которых имеет свое собственное множество производных классов. Для определения набора действий для самой общей интерпретации понятия (базового класса) часто можно использовать виртуальные функции (#7.2.8). Интерпретацию этих действий можно, в случае необходимости, усовершенствовать для отдельных специальных классов (производных классов).

Естественно, такая организация имеет свои ограничения. В частности, множество понятий иногда лучше организуется в виде ациклического графа, в котором понятие может непосредственно зависеть от более чем одного другого понятия, например, «A есть B и C и ...». В С++ нет непосредственной поддержки этого, но подобные связи можно представить, немного потеряв в элегантности и проделав малость дополнительной работы (#7.2.5).

Иногда для организации понятий некоторой программы оказывается непригоден даже ациклический граф, некоторые понятия оказываются взаимозависимыми по своей природе. Если множество взаимозависимых классов настолько мало, что его легко себе представить, то циклические зависимости не должны вызвать сложностей. Для представления множеств взаимозависимых классов с С++ можно использовать идею friend классов (#5.4.1).

Если вы можете организовать понятия программы только в виде общего графа (не дерева или ациклического направленного графа), и если вы не можете локализовать взаимные зависимости, то вы, по всей видимости, попали в затруднительное положение, из которого вас не выручит ни один язык программирования. Если вы не можете представить какой-либо просто формулируемой зависимости между основными понятиями, то скорее всего справиться с программой не удастся.

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

Вопрос «Как пишут хорошие программы на С++» очень похож на вопрос «Как пишут хорошую английскую прозу?» Есть два вида ответов: «Знайте, что вы хотите сказать» и «Практикуйтесь. Подражайте хорошему языку.» Оба совета оказываются подходящими к С++ в той же мере, сколь и для английского – и им столь же трудно следовать.

Правила Правой Руки*

Здесь приводится набор правил, которых вам хорошо бы придерживаться изучая С++. Когда вы станете более опытны, вы можете превратить их в то, что будет подходить для вашего рода деятельности и вашего стиля программирования. Они умышлено сделаны очень простыми, поэтому подробности в них опущены. Не воспринимайте их чересчур буквально. Написание хороших программ требует ума, вкуса и терпения. Вы не собираетесь как следует понять это с самого начала, поэкспериментируйте!

1. Когда вы программируете, вы создаете конкретное представление идей вашего решения некоторой задачи. Пусть структура отражает эти идеи настолько явно, насколько это возможно:

a) Если вы считаете «это» отдельным понятием, сделайте его классом.

b) Если вы считаете «это» отдельным объектом, сделайте его объектом некоторого класса.

c) Если два класса имеют общим нечто существенное, сделайте его базовым классом. Почти все классы в вашей программе будут иметь нечто общее. Заведите (почти) универсальный базовый класс, и разработайте его наиболее тщательно.

2. Когда вы определяете класс, который не реализует некоторый математический объект, вроде матрицы или комплексного числа, или тип низкого уровня, вроде связанного списка, то:

a) Не используйте глобальные данные.

b) Не используйте глобальные функции (не члены).

c) Не используйте открытые данные-члены.

d) Не используйте друзей, кроме как для того, чтобы избежать [a], [b] или [c].

e) Не обращайтесь к данным-членам или другим объектам непосредственно.

f) Не помещайте в класс «поле типа», используйте виртуальные функции.

g) Не используйте inline-функции, кроме как средство существенной оптимизации.

Замечания для Программистов на C

Чем лучше кто-нибудь знает C, тем труднее окажется избежать писания на С++ в стиле C, теряя, тем самым, некоторые возможные выгоды С++. Поэтому проглядите, пожалуйста, раздел «Отличия от C» в справочном руководстве (#с.15). Там указываются области, в которых С++ позволяет делать что-то лучше, чем C. Макросы (#define) в С++ почти никогда не бывают необходимы, чтобы определять провозглашаемые константы, используйте const (#2.4.6) или enum (#2.4.7), и inline (#1.12) – чтобы избежать лишних расходов на вызов функции. Старайтесь описывать все функции и типы всех параметров – есть очень мало веских причин этого не делать. Аналогично, практически нет причин описывать локальную переменную не инициализируя ее, поскольку описание может появляться везде, где может стоять оператор, – не описывайте переменную, пока она вам не нужна. Не используйте malloc() – операция new (#3.2.6) делает ту же работу лучше. Многие объединения не нуждаются в имени – используйте безымянные объединения (#2.5.2).

Библиографические Ссылки

В тексте мало прямых ссылок на литературу, но здесь приведен короткий список книг и статей, которые прямо или косвенно упоминаются.

[1] A.V. Aho, J.E. Hopcroft, and J.D. Ulman: Data Structures and Algorithms. Addison-Wesley, Reading, Massachusetts. 1983.

[2] O-J. Dahl, B. Myrhaug, and K. Nygaard: SIMULA Common Base Language. Norwegian Computer Center S-22, Oslo, Norsay. 1970

[3] O-J. Dahl and C.A.R. Hoare: Hierarchical Program Construction in «Structured Programming.» Academic Press, New York. 1972. pp 174-220.

[4] A. Goldberg and D. Robson: SMALLTALK-80 The Language and Its Implementation. Addison-Wesley, Reading, Massachusetts. 1983.

Перейти на стр:
Шрифт:
Продолжить читать на другом устройстве:
QR code

Новые книги

Смотреть все
Книга сердца. Светлый источник любви. Боль в твоём сердце
Книга сердца. Светлый источник любви. Боль в твоём сердце
[Здоровье / Эзотерика, оккультизм, фэн-шуй, йога]
Лууле Виилма (1950–2002) – известная эстонская целительница и парапсихолог. Общаясь с пациентами, она поняла, что любая болезнь – результат обид и стрессов, которые мы порой копим в себе годами.
0
"Зарубежный детектив 2026-30". Компиляция. Книги 1-12
[Детективы / Криминальный детектив / Полицейский детектив / Триллер]
Настоящий томик зарубежного детектива содержит детективы разных жанров и и вполне сможет завоевать симпатии читателей детективами включёнными в сборник! Приятого чтения, уважаемый читатель!
0
Ночь, когда он исчез
Ночь, когда он исчез
[Детективы / Триллер]
Новинка от автора супербестселлера №1 The New York Times! Долгожданный роман Лоры Дейв – автора феномена «Последнее, что он сказал мне», покорившего мир и экранизированного Apple TV+! Иногда,
0
Чайная под солнцем Тосканы
Чайная под солнцем Тосканы
[О любви / Современные любовные романы]
В свои тридцать четыре Тилли привыкла жить осторожно: черно-белые фотографии, крепкий кофе и никаких лишних надежд. Но после пожара, уничтожившего ее галерею, и предательства любимого человека
0
Я не мертва
Я не мертва
[Полицейский детектив / Детективы / Триллер]
Три года детектив Джуди Фонтейн была изолирована от внешнего мира. Заключенная в подземной камере, она общалась только со своим садистом-похитителем, и чтение его мыслей по выражению лица стало
0
Рождество с подвохом
Рождество с подвохом
[Классический детектив / Детективы]
Идеальное уютное чтение для поклонников «Убийств и кексиков» Питера Боланда, «Опасной игры бабули» Кристен Перрин и «Рецепта убийства для настоящей лентяйки» М. С. Битон. Детективы Вероники Хэли
0
Гнездо кабана: Истории из заповедника
Гнездо кабана: Истории из заповедника
[Современная проза / Биология]
Книга «Гнездо кабана: Истории из заповедника» написана человеком, для которого кабаны – не просто объект исследования. По мнению автора, кабан – зверь выдающийся и достоин особого внимания. Надежда
0
Магия Мастера Сефирот: тайные знания предков. Практики, ритуалы, заклинания, Таро
Магия Мастера Сефирот: тайные знания предков. Практики, ритуалы, заклинания, Таро
[Эзотерика, оккультизм, фэн-шуй, йога]
Если вы мечтали обучаться магии у настоящего Мастера, узнать все тайны сильнейших заклинаний, то у вас в руках – исполнение вашей мечты. В книге собраны уникальные техники, которые сделают из вас
0
Американский Освенцим. История больницы Пенхёрст
Американский Освенцим. История больницы Пенхёрст
[Публицистика / Военная документалистика / Документалистика]
Психиатрическая больница Пенхёрст — кровавое пятно в истории Соединённых Штатов. С 1908 по 1987 год там проводились бесчеловечные опыты над больными, в том числе над детьми. Им делали лоботомию,
0
Американская глубинка. Реднеки, хиллбилли и трейлеры
Американская глубинка. Реднеки, хиллбилли и трейлеры
[Публицистика / Документалистика / Обществознание]
Книга рассказывает о жизни американской глубинки так называемого Deep South — Глубокого Юга или Диксиленда. Автор книги, после многолетних путешествий по Югу США, повествует о жизни хиллбилли (горцах
0
Лейтенант. Том 3
Лейтенант. Том 3
[Альтернативная история / Исторические приключения / Попаданцы / Самиздат]
Весна 1905-го. Артур выстоял, блокада прорвана, море — своё. Но война не кончена: через полсвета идёт Вторая эскадра, и в книгах, которые помнит капитан 2 ранга Андрей Маринин, её дорога кончается
0
Стример из иного мира. Том 2
Стример из иного мира. Том 2
[Книги про волшебников / РеалРПГ (RealRPG) / Попаданцы / Самиздат]
Пусть и не по своей воле, но я попал в иной мир. Здесь я, по сути, продолжаю заниматься тем же, что и раньше, — стримить для зрителей. Вот только теперь за мной следят так называемые Небожители, а
1

Самые популярные книги

Железный характер Кристианы Морли
Железный характер Кристианы Морли
[Любовная фантастика / Попаданцы / Классическое фэнтези]
Удар копытом лошади рушит блестящие перспективы дебютантки. По мнению общества, хромота испортила не только плавную поступь девицы, но и характер! Это ж надо умудриться — вместо монастыря или
30
Хозяйка Тиховодья. Развод на краю болот
Хозяйка Тиховодья. Развод на краю болот
[Любовное фэнтези / Попаданцы]
- Двадцать четыре года, Веста. Наследника нет. Подпиши, и получишь Тиховодье. - А где это? - На краю Хляби. Тихо, сыро, никого. Утром я собирала клюкву в Мещёре и шагнула в болотное окно. Очнулась в
9
Хорошая, плохая, грешная 2
Хорошая, плохая, грешная 2
[Любовное фэнтези / Книги про волшебников / Попаданцы / Самиздат]
Новый Свет полон самых разных неожиданностей, как приятных, так и не очень. Новый Свет полон шикарных возможностей, только успевай их реализовывать. Новый Свет полон сильных мужчин и
6
Те, кто приходит в тишине
Те, кто приходит в тишине
[Альтернативная история / Попаданцы / Самиздат / Боевая фантастика]
Редкий бой бывает похож на предыдущий. Мы учимся. На своих и на чужих ошибках. Стараемся расти над собой. Противник – тоже. Он анализирует наши ошибки, учитывает остроумные решения. То есть
6
Комдив
Комдив
[Попаданцы / Альтернативная история / Самиздат]
Комдив Алексей Турчин отправляется в Соединенные Штаты Америки для изучения военно-промышленного комплекса и перспективных образцов вооружения. Удастся ли ему подтолкнуть развитие Рабоче-Крестьянской
5
Измена. Я тебя (не) любил
Измена. Я тебя (не) любил
[Современные любовные романы]
— Как тебе… — слышу прерывистый голос подруги, — мой подарок в честь твоего дня рождения?По меньшей мере иду я в верном направлении. Но вот предчувствие не из лучших. Голос Светы перемешивается со
6
Я попал в мужа любимой супергероини и теперь буду оберегать её от посягательств других суперов
Я попал в мужа любимой супергероини и теперь буду оберегать её от посягательств других суперов
[Попаданцы / Городское фэнтези / Юмористическое фэнтези / Самиздат]
Попытка создания пародии на попаданцев в комикс. Не фанфик, все герои и сюжет комикса, известные герою книги, выдуманы и не являются калькой с какого-то существующего произведения. Ну а главный
5
Мир без вуали
Мир без вуали
[Любовная фантастика / Самиздат]
Незаконное потребление наркотических средств, психотропных веществ, их аналогов причиняет вред здоровью, их незаконный оборот запрещен и влечет установленную законодательством ответственность.
4
Возлюбленная ишхасса
Возлюбленная ишхасса
[Любовная фантастика / Попаданцы / Классическое фэнтези]
Когда рушатся все планы и надежды, что делать, если нет сил пойти и убивать врага? Что если все что у тебя есть только гостиница, работники и интриги конкурентов? Да ничего, жить дальше, разбираться
4
Хорошая, плохая, грешная 3
Хорошая, плохая, грешная 3
[Попаданцы]
У Эвирейл Миардо нет ни единой свободной минутки на грусть и рефлексию! Да и когда? Столько дел, столько дел! Шахту выкопай, лавку открой, артефакты создай, эльфа за попу укуси... Ничего не
4
Майор: Сорокапятка 3
Майор: Сорокапятка 3
[Альтернативная история / Попаданцы / Самиздат]
Бобруйск. Минск. Брест. Висла. Одер. Красная армия наконец идёт туда, куда должна была идти с самого начала войны, — на запад. Так быстро, что карты не успевают за передовыми частями. А
4
Имперец. Ранг 4. Воевода
Имперец. Ранг 4. Воевода
[Боевая фантастика / Боевое фэнтези]
Спасение цесаревича от пули принесло Александру титул, должность личного телохранителя и редкую магию стихий. Теперь он – правая рука наследника престола и командир его личного отряда особого
5

Самые комментируемые

Семья для брошенки. Вторая жизнь с нуля
Семья для брошенки. Вторая жизнь с нуля
[Любовная фантастика / Самиздат / Попаданцы]
Семь лет унижений, презрения и пустой постели. Герцог Дрейк Ашфорд объявил свою истинную жену бракованной и отправил в ссылку на Ольцег — умирать среди таких же «ненужных». Он думал, что сломал
22
Отбор невест, или Три орешка для темного
Отбор невест, или Три орешка для темного
[Любовная фантастика]
Каждая приличная драконица должна пройти отбор невест, иначе внукам у камина будет нечего рассказать. Так говорила моя маменька, а ей можно верить — за ее спиной аж четыре таких отбора! Так что я
13
Печать Забытой Эпохи
Печать Забытой Эпохи
[Любовная фантастика / Попаданцы]
— Скажи спасибо, что не оставил босой на улице, Верадель. Забирай свои проклятые северные руины и убирайся, — самодовольно бросил мне бывший муж, швырнув на стол бумаги о разводе. Он думал, что
23
Хозяйка Тиховодья. Развод на краю болот
Хозяйка Тиховодья. Развод на краю болот
[Любовное фэнтези / Попаданцы]
- Двадцать четыре года, Веста. Наследника нет. Подпиши, и получишь Тиховодье. - А где это? - На краю Хляби. Тихо, сыро, никого. Утром я собирала клюкву в Мещёре и шагнула в болотное окно. Очнулась в
9
Шахматистка. Выжить на Арене Смерти
Шахматистка. Выжить на Арене Смерти
[Любовное фэнтези / Попаданцы / Книги про волшебников / Самиздат]
Кто-то попадает в имбовых персов: Избранных, Тёмных властелинов и прочих крутых ребят. А я попала в тело бездарной адептки магической академии. Как она сюда поступила-то, без грамма магии? Неважно,
12
Диагноз
Диагноз
[Самиздат / Детективная фантастика / Городское фэнтези / Юмористическая фантастика]
Некромантия в нашем мире давно стала такой же частью жизни, как радио, кино, телефоны и аэропланы. Но разве могла я подумать, что однажды приду наниматься на службу к лучшему некроманту столицы! Он —
17
Ведьма и Экзорцист. Второй шанс на жизнь
Ведьма и Экзорцист. Второй шанс на жизнь
[Детективы / Триллер / Любовное фэнтези / Фэнтези]
Приказ ясен: отравить Дерека вель Гранна. Последствия – костёр и пепел. Белладонна уже прошла этот круг, сгорела и получила второй шанс. Теперь она знает, что приказ – лишь верхушка заговора, в
4
Последняя Гадина империи
Последняя Гадина империи
[Попаданцы / Бояръ-Аниме / Русское фэнтези / Самиздат]
Пятьсот лет назад я была прославленным зельеваром, матриархом и почтенной основательницей династии. А сегодня очнулась в теле изнеженной барышни на пепелище семейной усадьбы и обнаружила, что весь
3
Хорошая, плохая, грешная 2
Хорошая, плохая, грешная 2
[Любовное фэнтези / Книги про волшебников / Попаданцы / Самиздат]
Новый Свет полон самых разных неожиданностей, как приятных, так и не очень. Новый Свет полон шикарных возможностей, только успевай их реализовывать. Новый Свет полон сильных мужчин и
6
Пулеметчик Федя
Пулеметчик Федя
[Альтернативная история / Юмористическая фантастика / Попаданцы / Самиздат]
Пулеметчик — это не звание, это диагноз. Тридцать пять лет, пулемёт «Печенег», рукавица прилипла к раскалённому кожуху — и здравствуйте: июнь сорок первого, чужие двадцать два года, чужие руки,
8
Регистрация
Регистрация
[Современная проза]
Может быть, если подождать, оно само рассосется. Надо только не думать про него: вот как оно туманом или тенью болтается где-то рядом, так пусть там и болтается. Имени ему не давать, не вызывать его.
15
Драконий брак, где всё не так
Драконий брак, где всё не так
[Любовная фантастика / Попаданцы]
Я оказалась в другом мире, у моего питомца тяжёлая психотравма, а всё из-за того, что один бестолковый дракон за сыном недосмотрел. И хоть бы извинился за своего драконёнка! Так нет, рычит,
2

Прямо сейчас читают

На распутье семи дорог
На распутье семи дорог
[Космическая фантастика]
Пелена темных туч закрыла будущее Земли, России и главного героя. Всему виной космические цивилизации, пришедшие на Землю со своими планами. Его путь пролег через учебку ЧВК и поля боя на окраинах
0
Некроманты пьют кофе со сливками
Некроманты пьют кофе со сливками
[Юмористическое фэнтези]
Хорошо быть некромантом! Ровно до того момента, как у тебя появляется назойливый поклонник с группой поддержки. А другой парень сбегает со свидания, стоит услышать о твоем призвании. Третий... Ну
0
Озверение
Озверение
[Боевое фэнтези / Книги про волшебников / Попаданцы]
Кажется, чем ближе столица, тем сложнее в неё попасть. Но зато скоро станет понятно, что именно не поделили Настоятель и глава Бурого Приората и почему им так нужны одарённые первушники. Первая мера
0
Где умирают хорошие девочки
Где умирают хорошие девочки
[Современные любовные романы / Эротика, Секс]
Попаданка в 1812: Любить и не сдаваться
Попаданка в 1812: Любить и не сдаваться
[Любовная фантастика / Самиздат / Попаданцы]
Я попала в прошлое, в 1812 год. Самый разгар войны с Наполеоном. Моё имение разорено солдатами французской армии. Мои люди убиты. Однако война подарила мне дочь и встречу с мужчиной, которого я могла
4
Шанхай [litres]
Шанхай [litres]
[Проза / Историческая проза / Старинная литература: прочее]
Имя Риити Ёкомицу (1898–1947) не так хорошо известно отечественному читателю, как имена его знаменитых современников – Акутагава Рюноскэ, Дзюнъитиро Танидзаки, Ясунари Кавабата – а между тем в
0
Роковой обмен
Роковой обмен
[Любовная фантастика]
Он — ее враг. Тот, кто пытался убить ее. И кого она пыталась убить. Но только он сможет спасти ее от жестокого безумного отца. Но что ей ему предложить? Он равнодушен к красоте. Он жесток. Ему никто
1
Убийство в доме свиданий
Убийство в доме свиданий
[Исторический детектив / Триллер]
«Убитая проститутка была совсем нагой. Она лежала на спине в своей холодной доступности, и тело ее, уже успевшее пожелтеть, напоминало хорошо полированную кость мамонта. Из-под ее правой груди
0
Ванька 13
Ванька 13
[Попаданцы / Боевая фантастика / Альтернативная история / Самиздат]
Три войны, плен, каторга, пара революций, вообще непонятно что... Эй, а нормальная-то жизнь здесь будет? Нет? Не в то время попал? Понятно...
3
Волк под кроватью. Человек-невидимка из седьмого «Б»
Волк под кроватью. Человек-невидимка из седьмого «Б»
[Детская литература: прочее / Детские приключения]
В сборник Лады Кутузовой вошли очень разные по жанру произведения: мистические рассказы «Волк под кроватью» и повесть «Человек-невидимка из седьмого “Б”». Мистические рассказы – это не добрые
0
Обратная сторона Луны
Обратная сторона Луны
[Современная проза]
Когда любимый человек умирает, все мы начинаем верить в потусторонний мир — ну, или хотя бы хотим верить. Когда ты учёный до мозга костей, сделать это труднее. Но всё-таки можно. А там, глядишь, и
0
Добрые люди
Добрые люди
[Книги про волшебников / Самиздат]
Наёмница. Воительница. Посланница богов? Никто точно не знает кто она и откуда пришла, но не стоит становиться у неё на пути.
0