Какие приложения вы разрабатывали на C++?

Ответ

Я создавал проекты на C++ разного масштаба, что позволило изучить различные аспекты языка и экосистемы.

1. Консольный файловый менеджер

  • Цель: Освоение работы с файловой системой и потоками ввода-вывода (I/O).
  • Функционал: Базовые операции (копирование, перемещение, удаление, просмотр файлов и каталогов).
  • Технологии: Стандартная библиотека (<fstream>, <filesystem> (C++17), <iostream>).
  • Пример кода:
    
    #include <filesystem>
    namespace fs = std::filesystem;

void copyFile(const fs::path& source, const fs::path& destination) { try { fs::copy_file(source, destination, fs::copy_options::overwrite_existing); std::cout << "File copied successfully.n"; } catch (const fs::filesystem_error& e) { std::cerr << "Error copying file: " << e.what() << 'n'; } }



**2. Многопоточный TCP-сервер**
*   **Цель:** Изучение сетевого программирования и асинхронных операций.
*   **Функционал:** Обработка одновременных подключений от нескольких клиентов, простой обмен сообщениями.
*   **Технологии:** Библиотека **Boost.Asio** для асинхронного ввода-вывода.

**3. Десктопное приложение с GUI для анализа логов**
*   **Цель:** Создание кроссплатформенного приложения с графическим интерфейсом.
*   **Функционал:** Загрузка лог-файлов, фильтрация по уровню (Error, Warning, Info), построение простых графиков статистики.
*   **Технологии:** Фреймворк **Qt** (виджеты, сигналы/слоты, QCharts).

**4. Простая 2D-игра**
*   **Цель:** Практика в области геймдева, работа с графикой и физикой.
*   **Жанр:** Платформер.
*   **Функционал:** Управление персонажем, обнаружение коллизий, анимация.
*   **Технологии:** Мультимедийная библиотека **SFML** (Simple and Fast Multimedia Library).

**Инструменты тестирования и отладки:**
*   **Google Test (GTest):** для модульного тестирования.
*   **Valgrind / AddressSanitizer:** для обнаружения утечек памяти и ошибок работы с ней.
*   **GDB (GNU Debugger):** для пошаговой отладки.

Ответ 18+ 🔞

Вот, смотри, какие проекты я на C++ понаворочал, чтобы понять, как эта ебаная махина вообще работает. Не просто тупые туториалы, а реальные штуки, от которых мозг иногда в трубу вылетает, но зато опыт — овердохуища.

1. Файловый менеджер в консольке

  • Зачем это было нужно: Чтобы наконец-то разобраться, как эта ваша файловая система не подыхает от моих экспериментов. И ввод-вывод, блядь, освоить.
  • Что он умел: Всё, что и положено нормальному менеджеру: копировать, перемещать, удалять, смотреть, что где валяется. Базово, но без этого никуда.
  • Из чего слеплен: Из того, что дала стандартная библиотека — <fstream>, <filesystem> (это уже C++17, да), <iostream>.
  • Вот, полюбуйся на кусочек кода, который просто файл копирует:
    
    #include <filesystem>
    namespace fs = std::filesystem;

void copyFile(const fs::path& source, const fs::path& destination) { try { fs::copy_file(source, destination, fs::copy_options::overwrite_existing); std::cout << "File copied successfully.n"; } catch (const fs::filesystem_error& e) { std::cerr << "Error copying file: " << e.what() << 'n'; } }


Просто? А ты попробуй без `<filesystem>` это сделать, там такой пиздец начинается с ручным открытием потоков, что волосы дыбом встают.

**2. TCP-сервер, который общается со всеми сразу**
*   **Зачем это было нужно:** Понять, как эти ваши сокеты работают и как не сойти с ума, когда к тебе десять клиентов одновременно стучатся. Асинхронщина, блядь!
*   **Что он умел:** Принимал кучу подключений и с каждым как-то общался. Ничего эпичного, но основа.
*   **Из чего слеплен:** **Boost.Asio**. Потому что делать это на голых сокетах — это уже мазохизм, а не обучение. Asio, конечно, тоже не сахар, но хоть цивилизованно.

**3. Прога с окошками для разбора логов**
*   **Зачем это было нужно:** Вылезти из консоли в мир, где есть кнопочки. И сделать что-то полезное, чтобы не просто "Hello World" в окошке.
*   **Что она умела:** Загружала эти ебучие лог-файлы, фильтровала сообщения (Error, Warning, Info — ну ты понял), и даже графики простенькие рисовала, сколько чего налогировано.
*   **Из чего слеплена:** **Qt**, конечно. Куда ж без него. Виджеты, сигналы-слоты — эта магия, которая сначала кажется бредом, а потом понимаешь, что оно гениально. И QCharts для графиков.

**4. Игрулька про прыгающего человечка**
*   **Зачем это было нужно:** Ну а как же без геймдева? Хотелось чего-то весёлого, где можно и графику потрогать, и физику примитивную написать.
*   **Жанр:** Да обычный платформер, что с него взять.
*   **Что умела:** Персонаж бегал-прыгал, стены не проходил насквозь (коллизии, ёпта!), спрайты мигали.
*   **Из чего слеплена:** **SFML**. Потому что он и правда Simple and Fast. Для первого раза — то, что надо. OpenGL на чистом C++ — это уже следующий уровень жести.

**А чем я всё это испытывал на прочность и отлаживал?**
*   **Google Test (GTest):** Чтобы не гадать, работает ли моя функция или просто сегодня удачный день. Писал тесты, запускал — если всё зелёное, можно жить дальше.
*   **Valgrind / AddressSanitizer:** Эти ребята ловили все мои косяки с памятью. Утечки, выход за границы массива — сразу светились, как ёлка. Без них — пиши пропало.
*   **GDB (отладчик GNU):** Когда всё падало в пизду и непонятно почему, приходилось садиться и пошагово смотреть, где же я, мудак, накосячил. Скучно, но жизненно необходимо.

Вот такой вот путь, от консольного скрипта до игрушки с картинками. Каждый проект — новые грабли, но зато и понимание растёт, блядь, не по дням, а по часам.