Базовый синтаксис языка С++



Установка компилятора языка С++ и среды разработки

Язык С++ является компилируемым, то есть трансляция кода с языка высокого уровня на инструкции машинного кода происходит не в момент выполнения, а заранее — в процессе изготовления так называемого исполняемого файла (в ОС Windows такие файлы имеют расширение .exe, а в ОС GNU/Linux чаще всего не имеют расширения).

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

Если вы не находитесь в компьютерном классе, компилятор GNU C++ и среда Code::Blocks уже установлены и готовы к использованию. А на своём компьютере вам нужно установить их самостоятельно.

Среда Code::Blocks вместе с компилятором MinGW на официальном сайте.

Скорее всего вам надо выбрать, скачать и инсталлировать
codeblocks-20.03mingw-setup.exe.

Сходные синтаксические конструкции Python и С++ (кратко)

Любая инструкция в C++ в отличие от Python, должна завершаться точкой c запятой (;).

Объявление переменных

Код на Python

a = 10.1
b = True
c = 10

Код на C++

double a = 10.1;
bool b = true;
int c = 10;

Поскольку на языке C++ необходимо самому указывать тип переменной при ее создании, стоит запомнить несколько базовых типов:

  • int - целочисленный тип со знаком
  • double - числа с плавающей точкой
  • bool - логический тип (обратите внимание, что на языке С++ значения "true" и "false" пишутся со строчной буквы)

Записать данные другого типа в объявленную ранее переменную невозможно.

Условные конструкции if, else

Код на Python

if condition1:  # Comment
    command 1
    command 2
elif condition2:
    command 3
else:
    command 4

Код на C++

if (condition1) {  // Comment
    command 1;
    command 2;
} else if (condition2) {
    command 3;
} else {
    command 4;
}

Циклы

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

Цикл while

Код на Python

while condition:
    command 1
    command 2

Код на C++

while (condition) {
    command 1;
    command 1;
}

Цикл for

Сравнение синтаксиса цикла, пробегающего от (min, max) в Python и C++.

Код на Python

for i in range(min, max):
    command 1
    command 2

Код на C++

for (int i = min; i < max; i++) {
    command 1;
    command 2;
}

Начинания со стандарта языка 2011 года, в С++ доступен для многих обьектов-контейнеров, работает range-based for цикл, пробегающий по всем элементам контейнера.

Код на Python

v = [1, 2, 3, 4]
for x in v:
        command

Код на C++

vector<int> v = {1, 2, 3, 4}
for (int x : v) {
        command;
}

Как и в Python, в C++ есть ключевые слова break; (для преждевременного выхода из цикла), continue; (для перехода к следующей итерации, минуя оставшееся тело цикла).

Подключение библиотек

Для подключения к исполняемой программе новых функций и объектов в C++ применяются так называемые "заголовочные файлы", имеющие расширение .h или .hpp. В Python для подключения функционала из другого файла или библиотеки используется команда import. В C++ подключение библиотеки производится при помощи директивы #include. В рассматриваемом примере <iostream> - заголовочный файл, содержащий базовую функциональность для работы с потоками ввода и вывода.

Код на Python

import sys
import array

Код на C++

#include <iostream>
#include <vector>

Функционал из разных стандартных библиотех С++ попадает в единое пространство имён std::. Поэтому приходится использовать объекты и функции так: std::vector и std::cout. Однако, если нет риска возникновения конфликтов, можно всё пространство имён вывалить наружу:

using namespace std;

После этого префикс std:: будет добавляться автоматически. Отношение профессионалов к этому такое же, как к from sys array *: в продакшн-коде так не делают, а в учебном — вполне допустимо.

Разбор программы "Hello, World!"

hello.cpp

Пример простой программы на С++, которая печатает "Привет, Мир!":

#include <iostream>

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

Для вывода здесь используется стандартная библиотека iostream, поток вывода cout.

Исполняемые операторы в программах на С++ не могут быть сами по себе — они должны быть обязательно заключены в функции.

Функция main() — это главная функция, выполнение программы начинается с её вызова и заканчивается выходом из неё. Возвращаемое значение main() в случае успешных вычислений должно быть равно 0, что значит "ошибка номер ноль", то есть "нет ошибки". В противном процесс, вызвавший программу, может посчитать её выполнившейся с ошибкой.

Чтобы выполнить программу, нужно её сохранить в текстовом файле hello.cpp и скомпилировать следующей командой:

$ g++ -o hello hello.cpp

Опция -o сообщает компилятору, что итоговый исполняемый файл должен называться hello. g++ — это компилятор языка C++, входящий в состав проекта GCC (GNU Compiler Collection). g++ не является единственным компиляторм языка C++. Помимо него в ходе курса мы будет использовать компилятор clang, поскольку он обладает рядом преимуществ, из которых нас больше всего интересует одно — этот компилятор выдаёт более понятные сообщения об ошибках по сравнению с g++.

Упражнение №1

Скомпилируйте и выполните данную программу.

Ввод и вывод на языке С++

В С++ ввод и вывод — это операция над объектом специального типа — потоком. Потоки определяются в специальной библиотеке ввода-вывода: #include <iostream>.

Строки string в С++ недоступны без подключения библиотеки #include <string>.

Вывод

Все идентификаторы стандартной библиотеки определены в пространстве имен std, что означает необходимость обращения к ним через квалификатор std:: или использование using namespace std; в начале программы.

std::cout << "mipt";
std::cout << 2016;
std::cout << '.';
std::cout << true;
std::cout << std::endl;

Заметим, что в С++ мы не прописываем типы выводимых значений, а компилятор сам разбирается в типе выводимого значения и выводит его соответствующим образом.

Вывод в один и тот же поток можно писать в одну строчку:

std::cout << "mipt" << 2016 << '.' << true << std::endl;

Для вывода в поток ошибок определён поток std::cerr.

Ввод с клавиатуры

Поток ввода с клавиатуры называется cin, а считывание из потока производится другой операцией — >> :

std::cin >> x;

Тип считываемого значения определяется автоматически по типу переменной x.

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

Например для введенной строки "Иван Иванович Иванов",

std::string name;
std::cin >> name;

считает в name только первое слово "Иван".

Считать всю строку целиком можно с помощью функции getline():

std::string name;
std::getline(std::cin, name);

Считывать несколько значений можно и в одну строку:

std::cin >> x >> y >> z;

Упражнение №2

Напишите программу, которая считает гипотенузу прямоугольного треугольника по двум катетам. Ввод и вывод стандартные.

Ввод Вывод
3 4 5

Задачи для тренировки использования циклов

Упражнение №3

Напишите программу, которая считывает число N, а затем вывод на экран звёздочки указанной формы, при N обозначает максимальное количество звёздочек в линии:

******
******
******
******
******
******

Упражнение №4

Напишите программу, которая считывает число N, а затем вывод на экран звёздочки указанной формы, при N обозначает максимальное количество звёздочек в линии:

*
**
***
****
*****
******

Упражнение №5

Напишите программу, которая считывает число N, а затем вывод на экран звёздочки указанной формы, при N обозначает максимальное количество звёздочек в линии:

******
*****
****
***
**
*

Упражнение №6

Напишите программу, которая считывает число N, а затем вывод на экран звёздочки указанной формы, при N обозначает максимальное количество звёздочек в линии:

*******
 *****
  ***
   *