Чтение онлайн

на главную - закладки

Жанры

Шрифт:

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

Правила правой руки

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

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

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.

[5] R.E. Griswold et.al. The Snobol4 Programming Language. Prentice-Hall, Englewood Cliffs, New Jersey. 1970.

[6] R.E. Griswold and M.T. Griswold: The ICON Programming Language. Prentice-Hall, Englewood Cliffs, New Jersey. 1983.

[7] Brian W. Kernighan and Dennis M. Ritchie: The C Programming Language. Prentice-Hall, Englewood Cliffs, New Jersey. 1978. Русский перевод в: Б.В. Керниган, Д. Ритчи, А. Фьюэр. Язык программирования Си. М.: Финансы и Статитика. 1985.

[8] George Orwell: 1984. Secker and Warburg, London. 1949. Русский перевод: Дж. Оруэлл. 1984.

[9] Martin Richards and Colin Whitby-Strevens: BCPL – The Language and Its Compiler. Cambridge University Press. 1980.

[10] L. Rosler (Chairman, ANSI X3J11 Language Subcommittee): Preliminary Draft Proposed Standard – The C Language. X3 Secretariat: Computer and Busineess Equipment Manufacturers Association, 311 First Street, N.W, Suite 500, Washington, DC 20001, USA.

[11] L.Rosler: The Evolution of C – Past and Future. AT amp;T Bell Laboratories Technical Journal. Vol.63 No.8 Part 2. October 1984. pp 1685-1700.

[12] Ravi Sethi: Uniform Syntax for Type Expressions and Declarations. Software Practice amp; Experience, Vol 11 (1981), pp 623-628.

[13] Bjarne Stroustrup: Adding Classes to C: An Exercise in Language Evolution. Software Practice amp; Experience, 13 (1981), pp 139-61.

[14] P.M. Woodward and S.G. Bond: Algol 68-R Users Guide. Her Majesty's Stationery Office, London. 1974.

[15] UNIX System V Release 2.0 User Reference Manual. AT amp;T Bell Laboratories, Murray Hill, New Jersey. December 1983.

[16] UNIX Time-Sharing System: Programmer's Manual. Research Version, Eighth Edition. AT amp;T Bell Laboratories, Murray Hill, New Jersey. February 1985.

[17] UNIX Programmer's Manual. 4.2 Berkeley Software Distribution University of California, Berkeley, California. March 1984.

Глава 1

Турне по С++

Единственный способ изучать новый язык программирования – писать на нем программы.

Брайэн Керниган

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

Поделиться:
Популярные книги

Евпатий

Курносенко Владимир
Проза:
роман
5.00
рейтинг книги
Евпатий

Стильная жизнь

Берсенева Анна
Любовные романы:
современные любовные романы
8.69
рейтинг книги
Стильная жизнь

Метатель

Тарасов Ник
1. Метатель
Фантастика:
боевая фантастика
попаданцы
рпг
фэнтези
фантастика: прочее
постапокалипсис
4.80
рейтинг книги
Метатель

Умное цветоводство круглый год на даче и дома

Кашин Сергей Павлович
Антикризисная дача
Дом и Семья:
сад и огород
5.00
рейтинг книги
Умное цветоводство круглый год на даче и дома

Буревестник. Трилогия

Сейтимбетов Самат Айдосович
Фантастика:
боевая фантастика
5.00
рейтинг книги
Буревестник. Трилогия

Тайна замка Вержи

Михалкова Елена Ивановна
Детективы:
исторические детективы
9.15
рейтинг книги
Тайна замка Вержи

Сексуальная жизнь мужчины. Книга 1

Еникеева Диля Дэрдовна
Дом и Семья:
образовательная литература
здоровье и красота
7.00
рейтинг книги
Сексуальная жизнь мужчины. Книга 1

Тоталитаризм и вероисповедания

Поспеловский Дмитрий Владимирович
1. История Церкви
Научно-образовательная:
история
5.00
рейтинг книги
Тоталитаризм и вероисповедания

Открывая организации будущего

Лалу Фредерик
Деловая литература:
о бизнесе популярно
деловая литература
корпоративная культура
5.00
рейтинг книги
Открывая организации будущего

Сборник "Этические уравнения"

Головачев Василий Васильевич
Фантастика:
научная фантастика
4.75
рейтинг книги
Сборник Этические уравнения

Долг

Кораблев Родион
7. Другая сторона
Фантастика:
боевая фантастика
5.60
рейтинг книги
Долг

Паладин из прошлого тысячелетия

Еслер Андрей
1. Соприкосновение миров
Фантастика:
боевая фантастика
попаданцы
6.67
рейтинг книги
Паладин из прошлого тысячелетия

Имперец. Том 5

Романов Михаил Яковлевич
4. Имперец
Фантастика:
попаданцы
альтернативная история
аниме
6.00
рейтинг книги
Имперец. Том 5

Повседневная жизнь в эпоху Жанны д'Арк

Дефурно Марселен
Живая история: Повседневная жизнь человечества
Научно-образовательная:
история
культурология
5.00
рейтинг книги
Повседневная жизнь в эпоху Жанны д'Арк