⚙️ C++

Aqui está a tradução do artigo de teoria de programação do Russo para o Português, seguindo todas as regras fornecidas.

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:

  1. Скачайте с winlibs.com
  2. Распакуйте, добавьте 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 программа