Первые шаги

Прежде чем мы начнем рассматривать синтаксис языка, необходимо сделать два замечания. Во-первых, не забывайте, что книги по программированию нужно не только читать, но и выполнять все приведенные в них примеры, а также экспериментировать, что-либо в этих примерах изменяя. Поэтому, если вы удобно устроились на диване и настроились просто читать, у вас практически нет шансов изучить язык! Во-вторых, помните, что прочитать книгу один раз недостаточно — ее вы должны выучить наизусть! Это основы языка! Сколько на это уйдет времени, зависит от ваших способностей и желания. Как минимум, вы должны знать структуру книги.

Чем больше вы будете делать самостоятельно, тем большему научитесь. Обычно после первого прочтения многое непонятно, после второго прочтения — некоторые вещи становятся понятнее, после третьего — еще лучше, ну, а после N-го прочтения — не понимаешь, как могло быть что-то непонятно после первого прочтения. Повторение — мать учения. Наберитесь терпения, и вперед!

Итак, приступим к изучению языка C++.

Первая программа

В процессе изучения основ языка C++ мы будем создавать консольные приложения. Консольное приложение — это программа, отображающая текстовую информацию и позволяющая вводить символы с клавиатуры. Консольное приложение позволит не отвлекаться на изучение среды разработки, а полностью сосредоточить внимание на изучении синтаксиса языка.

При изучении языков программирования принято начинать с программы, выводящей надпись Hello, world! в окно консоли. Не будем нарушать традицию и продемонстрируем, как это выглядит на языке C++ (листинг 2.1).

Листинг 2.1. Первая программа

#include <iostream>

int main() {
   std::cout << "Hello, world!" << std::endl;
   return 0;
}

Рассмотрим структуру программы из листинга 2.1. Вся программа состоит из четырех инструкций:

  • подключение системного заголовочного файла iostream с помощью директивы препроцессора #include;
  • описание функции main();
  • вывод приветствия с помощью объекта cout;
  • возврат значения с помощью инструкции return.

В первой строке программы с помощью директивы include подключается файл iostream, в котором объявлен объект cout, предназначенный для вывода данных в окно консоли. Так как название файла указано внутри угловых скобок, его поиск будет выполнен в путях поиска заголовочных файлов. Содержимое файла iostream на одной из стадий компиляции целиком вставляется вместо инструкции с директивой #include.

Заголовочный файл iostream входит в состав библиотеки MinGW и располагается в каталогах C:\MinGW32\mingw32\lib\gcc\i686-w64-mingw32\8.1.0\include\c++ и C:\msys64\mingw64\include\c++\8.2.1. Заголовочный файл является обычным текстовым файлом, поэтому его содержимое можно посмотреть в любом текстовом редакторе. Посмотреть содержимое файла можно также на отдельной вкладке редактора Eclipse. Для этого внутри вкладки с программой щелкаем правой кнопкой мыши на названии файла iostream и из контекстного меню выбираем пункт Open Declaration или вставляем текстовый курсор на название файла и нажимаем клавишу <F3>.

Далее создается функция main(), внутри блока которой расположены все остальные инструкции. Именно функция с названием main() будет автоматически вызываться при запуске программы. Определение функции является составной инструкцией, поэтому после описания параметров указывается открывающая фигурная скобка. Закрывающая фигурная скобка является признаком конца блока:

int main() {

}

Фигурные скобки заключают блок, который ограничивает область видимости идентификаторов. Все идентификаторы, описанные внутри блока, видны только внутри этого блока.

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

int main(void) { // В языке C

}

Что такое функция? Функция — это фрагмент кода внутри фигурных скобок, который может быть вызван из какого-либо места программы сколько угодно раз. При этом функция может возвращать какое-либо значение в место вызова или вообще ничего не возвращать, а просто выполнять какую-либо операцию.

Вывод строки Hello, world! осуществляется с помощью объекта cout. Объявление объекта cout расположено внутри файла iostream, поэтому в первой строке программы мы подключаем этот файл с помощью директивы #include. Если заголовочный файл не подключить, то объект будет недоступен.

Текст, выводимый в консоль, указывается в кавычках, после оператора <<. Этот оператор как бы наглядно показывает направление вывода. После текста оператор << указывается еще один раз, чтобы дополнительно добавить в поток символ перевода строки, который вставляется с помощью константы endl (сокращение от «end line»).

Чтобы исключить конфликт имен все стандартные идентификаторы в языке C++ определены в пространстве имен std. Поэтому перед именем объекта cout необходимо указать название пространства имен. Между названием пространства имен и названием объекта указываются два двоеточия (std::cout).

В небольших программах можно импортировать все идентификаторы из пространства имен std в глобальное пространство имен. Для этого используется следующая инструкция:

using namespace std;

Теперь перед объектом cout и константой endl название пространства имен std указывать не нужно:

cout << "Hello, world!" << endl;

Пример программы:

#include <iostream>

using namespace std;

int main() {
   cout << "Hello, world!" << endl;
   return 0;
}

Хотя это очень удобно, следует избегать импортирования всех идентификаторов в глобальное пространство имен, так как возможен конфликт имен. Вместо этого способа лучше импортировать определенные идентификаторы. Например, импортировать только идентификаторы cout и endl можно так:

using std::cout;
using std::endl;

Если необходимо импортировать все идентификаторы, то следует ограничить область видимости. Например, указать инструкцию using внутри функции. В этом случае область видимости ограничена рамками функции и в глобальное пространство имен идентификаторы не попадут:

#include <iostream>

int main() {
   using std::cout;
   using std::endl;
   cout << "Hello, world!" << endl;
   return 0;
}

После всех инструкций указывается точка с запятой. Исключением являются составные инструкции (в нашем примере после закрывающей фигурной скобки блока функции main() точка с запятой не указывается) и директивы препроцессора (в нашем примере нет точки с запятой после инструкции с директивой #include). Указать точку с запятой после инструкции это то же самое, что поставить точку в конце предложения.

Возвращаемое функцией main() значение указывается после ключевого слова return в самом конце блока перед закрывающей фигурной скобкой. Число 0 в данном случае означает нормальное завершение программы. Если указано другое число, то это свидетельствует о некорректном завершении программы. Согласно стандарту, внутри функции main() ключевое слово return можно не указывать. В этом случае компилятор должен самостоятельно вставить инструкцию, возвращающую значение 0.

При запуске программы будет автоматически вызвана функция main() и все инструкции внутри фигурных скобок будут выполняться сверху вниз друг за другом. Как только поток выполнения дойдет до закрывающий фигурной скобки или до инструкции return, программа завершит работу.

Скомпилируем программу и запустим ее на выполнение. Вначале попробуем это сделать из командной строки без помощи редактора.

Запускаем Notepad++ и создаем новый документ. В меню Кодировки выбираем пункт Кодировки | Кириллица | Windows-1251. Вводим текст из листинга 2.1 и сохраняем под названием helloworld.cpp в каталоге C:\book.

Теперь необходимо скомпилировать программу. Для этого открываем командную строку и делаем текущим каталог C:\book:

C:\Users\Unicross>cd C:\book

Затем настраиваем переменную окружения PATH:

C:\book>set Path=C:\msys64\mingw64\bin;%Path%

Теперь все готово для компиляции. Выполняем следующую команду (текст команды указывается на одной строке без символа переноса):

C:\book>g++ -Wall -Wconversion -O3 -finput-charset=cp1251 -fexec-charset=cp1251 -o helloworld.exe helloworld.cpp

Первое слово (g++) вызывает компилятор g++.exe. Флаг -Wall указывает выводить все предупреждающие сообщения, возникающие во время компиляции программы, флаг -Wconversion задает вывод предупреждений при возможной потере данных, а флаг -O3 определяет уровень оптимизации. С помощью флага -finput-charset указывается кодировка файла с программой, а с помощью флага -fexec-charset — кодировка C-строк. Название создаваемого в результате компиляции файла (helloworld.exe), задается после флага -o. Далее указывается название исходного текстового файла с программой на языке C++ (helloworld.cpp).

Если в процессе компиляции возникнут какие либо ошибки, то они будут выведены. Эти ошибки следует исправить, а затем запустить компиляцию повторно. Если компиляция прошла успешно, то никаких сообщений не появится, а отобразится приглашение для ввода следующей команды:

C:\book>g++ -Wall -Wconversion -O3 -finput-charset=cp1251 
            -fexec-charset=cp1251 -o helloworld.exe helloworld.cpp

C:\book>

После успешной компиляции в каталоге C:\book будет создан файл helloworld.exe, который можно запустить из командной строки следующим образом:

C:\book>helloworld
Hello, world!

Вторая строка в этом коде — это результат выполнения программы.

Учебник C++ (MinGW-W64)
Учебник C++ (MinGW-W64) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов