C++ 入门
C++ для начинающих: что это такое и почему стоит учить
C++ — один из самых мощных языков программирования в мире. Google Chrome, Windows, операционные системы, видеоигры AAA-класса, программы NASA — всё это написано на C++. В этом уроке разберём что такое C++, откуда он взялся и напишем первую программу.
Что такое C++ и чем он особенный?
C++ — это компилируемый язык программирования общего назначения. "Компилируемый" значит: ваш код превращается напрямую в машинные инструкции, которые процессор выполняет без посредников. Результат — максимальная скорость.
Сравните три подхода:
- Python — интерпретируемый: переводчик читает код строчку за строчкой во время выполнения. Просто, но медленно.
- Java — компилируется в байт-код, потом JVM его исполняет. Средняя скорость.
- C++ — компилируется прямо в машинный код. Максимальная скорость, минимальный расход памяти.
Аналогия: Python — это разговор через переводчика. Java — через переводчика-посредника. C++ — прямой разговор на языке процессора.
История: от "C с классами" до современного стандарта
В 1979 году датский учёный Бьёрн Страуструп (Bjarne Stroustrup) в AT&T Bell Labs начал работу над расширением языка C. Он хотел добавить к скорости C удобство объектно-ориентированного программирования из языка Simula.
В 1983 году новый язык получил имя C++ (инкремент C → "улучшенный C"). В 1998 году вышел первый международный стандарт C++98. После этого стандарты выходят регулярно: C++11 (революция!), C++14, C++17, C++20, C++23.
Где используется C++?
- Браузеры — Google Chrome, Firefox, Edge написаны на C++
- Операционные системы — части Windows, macOS, Linux
- Игры — Unreal Engine (Fortnite, PUBG), большинство AAA-игр
- Базы данных — MySQL, MongoDB, PostgreSQL
- ИИ/ML — TensorFlow, PyTorch написаны на C++ внутри
- Финансы — высокочастотная торговля (микросекунды важны!)
- Встроенные системы — Arduino, автомобили, самолёты
- Физические движки — Bullet, PhysX в играх и симуляциях
Компиляция vs Интерпретация — фундаментальное различие
// Интерпретируемый язык (Python):
Python code → Interpreter → CPU
Плюсы: кроссплатформенность, простота разработки
Минусы: медленнее в 10-100 раз
// Компилируемый язык (C++):
C++ code (.cpp)
↓ Препроцессор
Обработанный код
↓ Компилятор (g++, clang++)
Объектный файл (.o)
↓ Линковщик (linker)
Исполняемый файл (.exe / ./program)
↓ CPU
Выполнение!
Плюсы: максимальная скорость, контроль над памятью
Минусы: нужно компилировать под каждую платформу
Установка компилятора g++
Windows
Вариант 1 — MinGW-w64:
- Скачайте с winlibs.com
- Распакуйте, добавьте bin/ в PATH
Вариант 2 — WSL (рекомендуется):
# В PowerShell (администратор):
wsl --install
# Потом в WSL:
sudo apt install g++ build-essential
Вариант 3 — Visual Studio Community (скачать с visualstudio.microsoft.com)
macOS
xcode-select --install # Xcode Command Line Tools
g++ --version # Проверка
Linux (Ubuntu/Debian)
sudo apt update
sudo apt install g++ build-essential
g++ --version
# g++ (Ubuntu 11.4.0) 11.4.0
Первая программа: Hello, World!
Создайте файл hello.cpp:
#include <iostream>
using namespace std;
int main() {
cout << "Hello, World!" << endl;
return 0;
}
Компиляция и запуск:
# Компилируем
g++ hello.cpp -o hello
# Запускаем
./hello # Linux / macOS
hello.exe # Windows
# Результат:
Hello, World!
Разбор каждой строки
#include <iostream>
#include — директива препроцессора (начинается с #). Говорит компилятору: "скопируй содержимое файла iostream сюда".
<iostream> — стандартная библиотека ввода/вывода (input/output streams). Без неё нельзя использовать cout и cin.
Аналогия: #include — это как import в Python. Вы подключаете набор готовых инструментов.
using namespace std;
Все стандартные имена (cout, cin, endl и т.д.) живут в пространстве имён std. Без этой строки нужно писать std::cout.
// Без using namespace std:
std::cout << "Hello!" << std::endl;
// С using namespace std:
cout << "Hello!" << endl; // Проще!
Namespace (пространство имён) — способ избежать конфликтов имён. Как фамилия: Иван Иванов из компании std::Иванов — другой человек, чем просто Иванов.
int main() {
Точка входа — с main начинается выполнение программы. int — функция возвращает целое число (код завершения). 0 = успех, ненулевое = ошибка.
cout << "Hello, World!" << endl;
cout — Console OUTput, стандартный поток вывода (ваш экран).
<< — оператор вставки в поток. Читается: "отправить в cout".
"Hello, World!" — строковый литерал (тип const char* или std::string).
endl — конец строки + сброс буфера вывода. Замените на "
" для скорости.
return 0;
Возвращаем 0 операционной системе — знак успешного завершения.
Типичные ошибки новичков
// Ошибка 1: Забыт #include
cout << "Hello"; // error: 'cout' was not declared in this scope
// Ошибка 2: Неверный оператор
cout >> "Hello"; // ОШИБКА: >> это оператор ВВОДА! Для вывода нужен <<
// Ошибка 3: Забыта точка с запятой
cout << "Hello" // error: expected ';' before 'return'
return 0;
// Ошибка 4: Расширение файла
// hello.c — это C, не C++! Используйте hello.cpp
// Ошибка 5: Забыт return
int main() {
cout << "Hi";
} // Предупреждение: control reaches end of non-void function
Больше примеров вывода
#include <iostream>
#include <string>
using namespace std;
int main() {
// Различные типы данных
cout << 42 << endl; // Целое число
cout << 3.14 << endl; // Дробное
cout << 'A' << endl; // Символ
cout << true << endl; // 1 (булево)
cout << boolalpha << true << endl; // true (читаемо)
// Конкатенация через <<
string name = "Иван";
int age = 16;
cout << "Привет, " << name << "! Тебе " << age << " лет." << endl;
// Несколько строк
cout << "Строка 1
"; //
— перенос строки (быстрее endl)
cout << "Строка 2
";
// Форматированный вывод (нужен #include <iomanip>)
#include <iomanip>
double pi = 3.14159265;
cout << fixed << setprecision(2) << pi << endl; // 3.14
// Чтение ввода
string yourName;
int yourAge;
cout << "Введи имя: ";
cin >> yourName;
cout << "Введи возраст: ";
cin >> yourAge;
cout << "Привет, " << yourName << "! Тебе " << yourAge << " лет." << endl;
// getline — читает строку с пробелами
cin.ignore(); // Очистить буфер
string fullLine;
cout << "Введи целую строку: ";
getline(cin, fullLine);
cout << "Вы написали: " << fullLine << endl;
return 0;
}
Комментарии в C++
#include <iostream>
using namespace std;
int main() {
// Однострочный комментарий — до конца строки
/*
* Многострочный комментарий.
* Удобен для длинных пояснений.
*/
int count = 0; // Счётчик попыток входа (max 3)
// Совет: комментарии объясняют ЗАЧЕМ, а не ЧТО:
// Плохо: x = x + 1; // Увеличиваем x на 1
// Хорошо: attempts++; // Инкрементируем счётчик неудачных попыток
cout << "Комментарии = письма будущему себе" << endl;
return 0;
}
Флаги компилятора
# Базовая компиляция
g++ hello.cpp -o hello
# С предупреждениями (всегда используйте при разработке!)
g++ -Wall -Wextra hello.cpp -o hello
# С++ стандарт (рекомендуем C++17)
g++ -std=c++17 hello.cpp -o hello
# Оптимизация (для финальной версии)
g++ -O2 hello.cpp -o hello
# Для отладки
g++ -g hello.cpp -o hello
# Всё вместе — для разработки:
g++ -std=c++17 -Wall -Wextra -g hello.cpp -o hello
# Вывод промежуточного кода — для изучения:
g++ -S hello.cpp # Создаёт hello.s (ассемблер)
g++ -E hello.cpp # Показывает код после препроцессора
Практические задания
Задание 1: О себе
#include <iostream>
using namespace std;
int main() {
cout << "Меня зовут Иван Петров" << endl;
cout << "Мне 16 лет" << endl;
cout << "Моё хобби: программирование на C++" << endl;
return 0;
}
Задание 2: Калькулятор
#include <iostream>
using namespace std;
int main() {
int a = 15, b = 4;
cout << a << " + " << b << " = " << a+b << endl; // 19
cout << a << " - " << b << " = " << a-b << endl; // 11
cout << a << " * " << b << " = " << a*b << endl; // 60
cout << a << " / " << b << " = " << a/b << endl; // 3 (целое!)
cout << a << " % " << b << " = " << a%b << endl; // 3 (остаток)
cout << (double)a << " / " << b << " = " << (double)a/b << endl; // 3.75
return 0;
}
Задание 3: Ввод и вывод
#include <iostream>
#include <string>
using namespace std;
int main() {
string name;
int year;
cout << "Введи своё имя: ";
cin >> name;
cout << "Введи год рождения: ";
cin >> year;
int age = 2024 - year;
cout << "Привет, " << name << "! Тебе примерно " << age << " лет." << endl;
cout << "Это примерно " << age * 12 << " месяцев." << endl;
return 0;
}
Итого: что мы узнали
- ✅ C++ создан Бьёрном Страуструпом в 1983 году ("C с классами")
- ✅ C++ — компилируемый язык: максимальная скорость выполнения
- ✅ Применяется в играх, браузерах, ОС, базах данных, финансах, ИИ
- ✅
#include <iostream>— подключение библиотеки ввода/вывода - ✅
using namespace std;— не писать std:: перед именами - ✅
int main()— точка входа;return 0= успешное завершение - ✅
cout <<— вывод;cin >>— ввод;endlили" "— перенос строки - ✅ Компиляция:
g++ файл.cpp -o программа - ✅ Рекомендуется:
g++ -std=c++17 -Wall -Wextra файл.cpp -o программа