Главная » Статьи » Мои статьи » С++ для начинающих |
В С++ действие называется выражением, а выражение, заканчивающееся точкой с
запятой, – инструкцией. Инструкция – это атомарная часть
С++ программы, которой в программе на С++ соответствует предложение
естественного языка. Вот примеры инструкций С++:
cout << "значение переменной
book_count: " << book_count; Первая из приведенных инструкций является инструкцией объявления. book_count можно назвать идентификатором, символической переменной (или просто переменной) или объектом. Переменной соответствует область в памяти компьютера, соотнесенная с определенным именем (в данном случае book_count), в которой хранится значение типа (в нашем случае целого). 0 – это константа. Переменная book_count инициализирована значением 0. Вторая инструкция – присваивание.
Она помещает в область памяти, отведенную переменной book_count,
результат сложения двух других переменных – books_on_shelf
и books_on_order.
Предполагается, что эти две целочисленные переменные определены где-то ранее в
программе и им присвоены некоторые значения. Третья инструкция является инструкцией вывода. cout – это выходной поток,
направленный на терминал, << – оператор вывода. Эта инструкция
выводит в cout –
то есть на терминал – сначала символьную константу, заключенную в двойные
кавычки ("значение переменной book_count:
"), затем значение,
содержащееся в области памяти, отведенном под переменную book_count.
В результате выполнения данной инструкции мы получим на терминале сообщение: значение переменной
book_count: 11273 если значение book_count
равно 11273
в данной точке выполнения программы. Инструкции часто объединяются в именованные группы, называемые функциями. Так, группа инструкций, необходимых для чтения исходного файла, объединена в функцию readIn(). Аналогичным образом инструкции для выполнения оставшихся подзадач сгруппированы в функции sort(), compact() и print(). В каждой С++
программе должна быть ровно одна функция с именем main().
Вот как может выглядеть эта функция для нашего алгоритма:
} Исполнение программы начинается с выполнения первой
инструкции функции main(), в нашем случае – вызовом функции
readIn().
Затем одна за другой исполняются все дальнейшие инструкции, и, выполнив
последнюю инструкцию функции main(), программа заканчивает работу. Функция состоит их четырех частей: типа возвращаемого значения, имени, списка параметров и тела функции. Первые три части составляют прототип функции. Список параметров заключается в круглые скобки и может
содержать ноль или более параметров, разделенных запятыми. Тело функции
содержит последовательность исполняемых инструкций и ограничено фигурными
скобками. В нашем примере тело функции main()
содержит вызовы функций readIn(),
sort(),
compact()
и print().
Последней выполняется инструкция return 0; Инструкция return
обеспечивает механизм завершения работы функции. Если оператор return
сопровождается некоторым значением (в данном примере 0), это значение
становится возвращаемым значением
функции. В нашем примере возвращаемое значение 0
говорит об успешном выполнении функции main().
(Стандарт С++ предусматривает, что функция main()
возвращает 0
по умолчанию, если оператор return не использован явно.) Давайте закончим нашу программу, чтобы ее можно было
откомпилировать и выполнить. Во-первых, мы
должны определить функции readIn(), sort(), compact()
и print().
Для начала вполне подойдут заглушки:
void compact() { cout << "compact()\n"; } void print() { cout << "print ()\n"; } Тип void используется, чтобы обозначить
функцию, которая не возвращает никакого значения. Наши заглушки не производят
никаких полезных действий, они только выводят на терминал сообщения о том, что
были вызваны. Впоследствии мы заменим их на реальные функции, выполняющие
нужную нам работу. Пошаговый метод написания программ позволяет справляться с
неизбежными ошибками. Попытаться заставить работать сразу всю программу –
слишком сложное занятие. Имя файла с текстом программы, или исходного файла, как
правило, состоит из двух частей: собственно имени (например, bookstore)
и расширения, записываемого после точки. Расширение, в соответствии с принятыми
соглашениями, служит для определения назначения файла. Файл bookstore.h является заголовочным файлом для С или С++ программы. (Необходимо отметить,
что стандартные заголовочные файлы С++ являются исключением из правила: у них
нет расширения.) Файл bookstore.c является исходным файлом для нашей С
программы. В операционной системе UNIX, где строчные и прописные буквы в именах
файлов различаются, расширение .C обозначает исходный текст С++ программы, и в
файле bookstore.C располагается исходный текст С++. В других операционных системах, в частности в DOS, где
строчные и прописные буквы не различаются, разные реализации могут использовать
разные соглашения для обозначения исходных файлов С++. Чаще всего употребляются
расширения .cpp
и .cxx: bookstore.cpp, bookstore.cxx. Заголовочные файлы С++ программ также могут иметь разные
расширения в разных реализациях (и это одна из причин того, что стандартные
заголовочные файлы С++ не имеют расширения). Расширения, используемые в
конкретной реализации компилятора С++, указаны в поставляемой вместе с ним документации. Итак, создадим текст законченной С++ программы (используя
любой текстовый редактор):
} Здесь iostream –
стандартный заголовочный файл библиотеки ввода/вывода (обратите внимание: у
него нет расширения). Эта библиотека содержит информацию о потоке cout,
используемом в нашей программе. #include
является директивой препроцессора,
заставляющей включить в нашу программу текст из заголовочного файла iostream.
(Директивы препроцессора рассматриваются в разделе 1.3.) Непосредственно за директивой препроцессора #include <iostream> следует инструкция using namespace std; Эта инструкция называется директивой using. Имена, используемые в стандартной библиотеке С++ (такие, как cout), объявлены в пространстве имен std и невидимы в нашей программе до тех пор, пока мы явно не сделаем их видимыми, для чего и применяется данная директива. (Подробнее о пространстве имен говорится в разделах 2.7 и 8.5.)[1] После того как исходный текст программы помещен в файл,
скажем prog1.C,
мы должны откомпилировать его. В UNIX для этого выполняется следующая команда: $ CC prog1.C Здесь $ представляет собой приглашение командной строки.
CC – команда вызова компилятора С++, принятая в большинстве UNIX-систем.
Команды вызова компилятора могут быть разными в разных системах. Одной из задач, выполняемых компилятором в процессе
обработки исходного файла, является проверка правильности программы. Компилятор
не может обнаружить смысловые ошибки, однако он может найти формальные ошибки в
тексте программы. Существует два типа формальных ошибок: синтаксические ошибки. Программист может допустить
"грамматические”, с точки зрения языка С++, ошибки. Например:
} ошибки типизации. С каждой переменной и константой в С++
сопоставлен некоторый тип. Например, число 10 – целого типа. Строка "hello",
заключенная в двойные кавычки, имеет символьный тип. Если функция ожидает
получить в качестве параметра целое значение, а получает символьную строку,
компилятор рассматривает это как ошибку типизации. Сообщение об ошибке содержит номер строки и краткое
описание. Полезно просматривать список ошибок, начиная с первой, потому что
одна-единственная ошибка может вызвать цепную реакцию, появление "наведенных”
ошибок. Исправление этой единственной ошибки приведет и к исчезновению
остальных. После исправления синтаксических ошибок программу нужно
перекомпилировать. После проверки на правильность компилятор переводит исходный текст в объектный код, который может быть понят и исполнен компьютером. Эту фазу работы компилятора называют генерацией кода. В результате успешной компиляции образуется выполняемый
файл. Если запустить выполняемый файл, полученный в результате компиляции нашей
программы, на терминале появится следующий текст:
print() В С++ набор основных типов данных – это целый и
вещественный числовые типы, символьный тип и логический, или булевский. Каждый
тип обозначается своим ключевым словом. Любой объект программы ассоциируется с
некоторым типом. Например:
bool found = false; Здесь определены четыре объекта: age, price, delimiter, found, имеющие соответственно типы целый, вещественный с двойной точностью, символьный и логический. Каждый объект инициализирован константой – целым числом 10, вещественным числом 19.99, символом пробела и логическим значением false. Между основными типами данных может осуществляться неявное преобразование типов. Если переменной age,
имеющей тип int,
присвоить константу типа double, например: age = 33.333; то значением переменной age
станет целое число 33. (Стандартные преобразования типов, а
также общие проблемы преобразования типов рассматриваются в разделе 4.14.) Стандартная библиотека С++ расширяет
базовый набор типов, добавляя к ним такие типы, как строка, комплексное число,
вектор, список. Примеры:
vector<string> chapter_titles(20); Здесь current_chapter –
объект типа string,
инициализированный константой "Начинаем".
Переменная chapter_titles –
вектор из 20 элементов строкового типа. Несколько необычный синтаксис выражения vector<string> сообщает компилятору о необходимости создать вектор,
содержащий объекты типа string. Для того чтобы определить вектор из
20 целых значений, необходимо написать: vector<int> ivec(20); Никакой язык, никакие стандартные библиотеки не способны
обеспечить нас всеми типами данных, которые могут потребоваться. Взамен
современные языки программирования предоставляют механизм создания новых типов
данных. В С++ для этого служит механизм классов. Все расширенные типы данных из
стандартной библиотеки С++, такие как строка, комплексное число, вектор,
список, являются классами, написанными на С++. Классами являются и объекты из
библиотеки ввода/вывода. Механизм классов – одна из самых главных особенностей
языка С++, и в главе 2 мы рассмотрим его очень подробно. [1] Во время написания этой книги не все компиляторы С++ поддерживали пространства имен. Если ваш компилятор таков, откажитесь от данной директивы. Большинство программ, приводимых нами, используют компиляторы, не поддерживающие пространство имен, поэтому директива using в них отсутствует. | |||||||||
Просмотров: 11006 | Комментарии: 4 | | |
Всего комментариев: 3 | |
| |