Базовый синтаксис языка С++
Установка компилятора языка С++ и среды разработки
Язык С++ является компилируемым, то есть трансляция кода с языка высокого
уровня на инструкции машинного кода происходит не в момент выполнения, а
заранее — в процессе изготовления так называемого исполняемого файла
(в ОС 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 обозначает максимальное количество звёздочек в линии:
*******
*****
***
*