Дорожная карта для питонщика, который лезет в плюсы. Проходил это сам.
Фаза 1: Синтаксис (2-3 недели)
Книга: Стивен Прата "Язык программирования C++. Лекции и упражнения". Толстая, но написана для людей. Каждую главу заканчивай упражнениями, не пропускай.
Параллельно пиши код каждый день. Хотя бы 30 минут. Без практики C++ не выучить, это не Python где можно в REPL потыкаться.
Фаза 2: Указатели и память (2-3 недели)
Тут будет больно. В Python ты никогда не думал о том, где живет твоя переменная. В C++ это центральный вопрос.
Пойми разницу между стеком и кучей. Пойми что такое new/delete. Потом забудь про new/delete и учи smart pointers (unique_ptr, shared_ptr). Современный C++ (C++17/20) настоятельно рекомендует НЕ использовать голые указатели для владения памятью.
// Плохо (C-style)
int* arr = new int[100];
// ... забыл delete[] arr - утечка памяти
// Хорошо (современный C++)
auto arr = std::make_unique<int[]>(100);
// память освободится автоматически
Фаза 3: ООП (2-3 недели)
Ты знаешь ООП из Python, но в C++ все сложнее. Виртуальные деструкторы, множественное наследование, перегрузка операторов, правило трех/пяти. Тут Прата хорош, но можно добавить Мейерса "Эффективный C++" для понимания "почему" за каждым правилом.
Фаза 4: STL и шаблоны (2 недели)
vector, map, unordered_map, string, algorithm. Это твой хлеб. Шаблоны для начала достаточно уметь ИСПОЛЬЗОВАТЬ, писать свои шаблоны на первом курсе не потребуется.
Грабли питонщика:
- Забываешь точку с запятой. Первые дни будешь забывать постоянно, потом привыкнешь.
- Пишешь
= вместо == в условиях. Компилятор предупредит, но не всегда.
- Путаешь
std::string и char*. Используй std::string, забудь что char* существует.
- Не объявляешь типы. В Python
x = 5 работает. В C++ нужно int x = 5;. Привыкай.
- Компиляция. Ты привык что скрипт просто запускается. Тут цикл: написал - скомпилировал - исправил ошибки компиляции - скомпилировал - запустил - словил segfault - дебажишь.
Огонь ответ. Прата заказал, начинаю завтра. Про smart pointers вообще не слышал, хорошо что предупредил.