Основные принципы программирования на C++

Основные принципы C++: как устроен язык, что значит «ближе к железу» и почему C++ остаётся актуальным.

C++ — компилируемый, статически типизированный язык, который сочетает низкоуровневый контроль над памятью с высокоуровневыми абстракциями ООП и обобщённым программированием.

Три уровня абстракции C++

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

  • Низкоуровневый — прямая работа с памятью через указатели, управление ресурсами вручную.
  • Процедурный — функции, массивы, структуры — наследство от C.
  • Объектно-ориентированный — классы, наследование, полиморфизм.
  • Обобщённый — шаблоны (templates), которые работают с любым типом данных.

Компиляция и скорость

Код C++ компилируется прямо в машинные инструкции — без виртуальной машины, без интерпретатора. Отсюда скорость выполнения, сравнимая с C и ассемблером.

// Самая простая программа на C++
#include <iostream>

int main() {
    std::cout << "Привет, C++!" << std::endl;
    return 0;
}

Вывод:

Привет, C++!

Компилятор (g++ или clang++) превращает этот текст в исполняемый файл. Именно поэтому C++ применяют там, где важна производительность: игровые движки, операционные системы, браузеры, базы данных.

Принцип «платишь только за то, что используешь»

В C++ нет скрытых накладных расходов. Если вы не используете исключения — они не влияют на производительность. Если не используете виртуальные функции — таблица vtable не создаётся. Это фундаментальный принцип языка, сформулированный его создателем Бьёрном Страуструпом.

Zero-overhead principle: абстракции C++ не стоят ничего лишнего по сравнению с написанием того же кода вручную.

RAII — управление ресурсами

Один из ключевых идиом C++ — RAII (Resource Acquisition Is Initialization): ресурс (память, файл, сетевое соединение) захватывается в конструкторе объекта и освобождается в деструкторе. Это защищает от утечек памяти.

#include <fstream>

void writeFile() {
    std::ofstream file("test.txt");  // открываем файл в конструкторе
    file << "Hello";
    // деструктор автоматически закроет файл при выходе из функции
}

Типичные ловушки новичка

  • Забыть #include — компилятор не найдёт cout или string.
  • Не писать std:: — без using namespace std; нужен префикс.
  • Путать = и == — первый присваивает, второй сравнивает.
  • Пропустить точку с запятой — каждый оператор заканчивается ;.

Коротко

  • C++ компилируется в машинный код — поэтому быстрый.
  • Поддерживает 4 парадигмы: процедурную, ООП, обобщённую и низкоуровневую.
  • Принцип zero-overhead: платишь только за то, что реально используешь.
  • RAII — идиома автоматического управления ресурсами через конструктор/деструктор.
Проверьте себя
1. Что означает принцип zero-overhead в C++?
AПрограмма не занимает памяти
BКомпилятор всегда оптимизирует код
CНеиспользуемые абстракции не стоят ничего по сравнению с ручным кодом
DВ C++ нет накладных расходов на ввод-вывод
2. Что такое RAII?
AМетод сортировки массивов
BТип умного указателя
CЗахват ресурса в конструкторе и освобождение в деструкторе
DПаттерн проектирования «Синглтон»
3. Как C++ выполняется по сравнению с Java или Python?
AЧерез виртуальную машину
BКомпилируется в машинный код напрямую
CИнтерпретируется построчно
DТранспилируется в JavaScript