# C++ у Maguyva: графи класів і викликів для великих кодових баз

Canonical source: https://maguyva.ai/uk/languages/cpp

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

Maguyva підтримує C++ з AST, символами та графом, щоб ШІ-агенти відстежували класи, простори імен, віртуальні перевизначення й тих, хто викликає, у великих кодових базах.

## Знімок підтримки

- Рівень: Підтримка AST і символів
- Програмування
- Розширення: .c, .c++, .cc, .cpp, .cxx, .h, +4 ще
- Справжній розбір AST для пошуку з урахуванням синтаксису та структурного контексту.
- Іменовані символи забезпечують семантичний пошук і перехресні посилання. Навігація графом доступна, коли ввімкнено видобування зв’язків.
- Ця мова додає символи та зв’язки до пошуку з урахуванням графа; підтримувані типи ребер залежать від притаманних їй конструкцій.
- Доступні як розбір AST, так і видобування символів.

## Найкраще підходить

- Ігрові рушії, торгові системи, браузери та інші великі кодові бази на C++, де правка одного заголовка перезбирає пів дерева.
- Ієрархії класів із віртуальними методами, де метод, що виконується, визначено не там, де його викликають.
- Рефакторинг за участі агентів, якому перед зміною сигнатури потрібні ті, хто викликає, і перевизначення.

## Робочі процеси агента

- Знайти всі перевизначення віртуального методу, перш ніж змінювати базовий клас.
- Перелічити по всій кодовій базі тих, хто викликає функцію чи метод класу з простору імен, наприклад `net::Socket::send`.
- Простежити, де клас створюється через `new` і яких членів він торкається далі.

## Чому C++ потрібна структура, а не текстовий пошук

У C++ назви не унікальні. `send` може бути вільною функцією, членом трьох класів і перевизначенням у четвертому. Простори імен, шаблони й визначення поза класом, як-от `Socket::send` у файлі `.cpp`, розподіляють один тип по багатьох файлах. Текстовий пошук повертає всі збіги, але не каже агентові, до якого з них доходить виклик.

Maguyva індексує класи, члени й виклики разом з їхніми власниками, щоб агент ішов реальною структурою, перш ніж вносити правки.

## Що Maguyva витягує з C++

Maguyva охоплює поширені розширення вихідних і заголовкових файлів C++, зокрема `.cpp`, `.cc`, `.cxx`, `.hpp`, `.hh` і `.hxx`. Витягуються класи, структури й функції, а визначення поза класом, як-от `void Socket::send()`, належить до класу-власника та простору імен. Віртуальні члени фіксуються, а параметри шаблонів входять до сигнатур.

Типізація отримувачів відстежує параметри, локальні оголошення, поля, цикли `for` по діапазону та `auto`, а також зазирає всередину `unique_ptr`, `shared_ptr` і `optional`, тож виклик на кшталт `conn->send()` можна розв'язати в потрібний клас. Списки базових класів живлять успадкування, а вирази `new` вважаються створенням екземплярів.

Діє те саме маскування макросів експорту й анотацій, що й у C. Близько 273 назв стандартної бібліотеки (`std::cout`, `std::endl`, `printf` тощо) відфільтровуються зі зв'язків. Граф фіксує виклики, include, успадкування, перевизначення, створення екземплярів, посилання на типи, читання й записи, а також ребра `throw`.

## Приклади промптів для агентів

- «Які класи перевизначають `Renderer::draw` і хто його викликає?» (`dependency_search`)
- «Покажи `OrderBook::match` і всіх, хто його викликає.» (`find_symbol`)
- «Поясни, як повідомлення з ринковими даними доходить до рушія стратегій.» (`get_task_context`)

## Відомі обмеження

- `.h` входить до списків розширень C, C++ і Objective-C, тому в деревах, де змішано C і C++, заголовки спільні для цих профілів.
- Тіла об'єктних макросів не розбираються, а виклики відфільтрованих назв стандартної бібліотеки не стають ребрами графа. Для макросів і використання `std::` застосовуйте `text_pattern_search`.

## Наступні кроки

Під'єднайте репозиторій за [швидким стартом](/uk/docs/quickstart), потім перегляньте матрицю підтримки на [сторінці сумісності](/uk/docs/compatibility). Якщо частину дерева написано на чистому C, прочитайте також [посібник із C](/uk/languages/c).

## Деталі рушія

- Визначення поза класом, як-от `void Socket::send()`, належать до класу-власника та простору імен, а віртуальні члени фіксуються.
- Типізація отримувачів відстежує параметри, локальні змінні, поля, `for` по діапазону та `auto` і зазирає всередину `unique_ptr`, `shared_ptr` і `optional`.
- Списки базових класів живлять успадкування, вирази `new` вважаються створенням екземплярів, а близько 273 назв стандартної бібліотеки відфільтровуються зі зв'язків.

## Корисні точки входу MCP

- `find_symbol`: Використовуйте з кваліфікованою назвою на кшталт `OrderBook::match`, коли потрібні визначення й ті, хто викликає.
- `dependency_search`: Перед зміною сигнатури використовуйте для базового класу чи віртуального методу, щоб знайти перевизначення й тих, хто викликає.
- `get_task_context`: Використовуйте для промптів на кшталт «поясни, як повідомлення з ринковими даними доходить до рушія стратегій».
