# C++ di Maguyva: graf kelas dan panggilan untuk basis kode besar

Canonical source: https://maguyva.ai/id/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 mendukung C++ dengan AST, simbol, dan graf, sehingga agen AI dapat menelusuri kelas, namespace, override virtual, dan pemanggil dalam basis kode C++ yang besar.

## Snapshot dukungan

- Tier: Dukungan AST dan simbol
- Pemrograman
- Ekstensi: .c, .c++, .cc, .cpp, .cxx, .h, +4 lagi
- Parsing AST sungguhan untuk pencarian sadar-syntax dan konteks struktural.
- Simbol bernama menggerakkan pencarian semantik dan cross-reference. Navigasi graf tersedia saat ekstraksi relasi diaktifkan.
- Bahasa ini menyumbangkan simbol dan relasi ke pencarian berbasis graf; jenis edge yang didukung bervariasi sesuai konstruk bawaan bahasa tersebut.
- Parsing AST dan ekstraksi simbol sama-sama tersedia.

## Paling cocok untuk

- Mesin game, sistem perdagangan, peramban, dan basis kode C++ besar lainnya, tempat perubahan satu header memicu build ulang separuh pohon kode.
- Hierarki kelas dengan metode virtual, tempat metode yang dijalankan didefinisikan di tempat lain dari tempat ia dipanggil.
- Refactor berbantuan agen yang membutuhkan pemanggil dan override sebelum signature berubah.

## Workflow agent

- Menemukan setiap override sebuah metode virtual sebelum kelas dasarnya berubah.
- Mendaftar pemanggil fungsi atau metode kelas ber-namespace, seperti `net::Socket::send`, di seluruh basis kode.
- Menelusuri tempat sebuah kelas dibuat dengan `new` dan anggota yang disentuhnya kemudian.

## Mengapa C++ membutuhkan struktur, bukan pencarian teks

Di C++, nama tidak unik. `send` bisa berupa fungsi bebas, anggota tiga kelas, dan override di kelas keempat. Namespace, template, dan definisi di luar kelas, seperti `Socket::send` dalam berkas `.cpp`, memecah satu tipe ke banyak berkas. Pencarian teks mengembalikan setiap kecocokan, tetapi tidak memberi tahu agen mana yang dicapai sebuah panggilan.

Maguyva mengindeks kelas, anggota, dan panggilan beserta pemiliknya, sehingga agen mengikuti struktur sebenarnya sebelum menyunting.

## Apa yang diekstrak Maguyva dari C++

Maguyva mencakup ekstensi berkas sumber dan header C++ yang umum, termasuk `.cpp`, `.cc`, `.cxx`, `.hpp`, `.hh`, dan `.hxx`. Kelas, struct, dan fungsi diekstrak, dan definisi di luar kelas seperti `void Socket::send()` diatribusikan ke kelas pemilik dan namespace-nya. Anggota virtual dicatat, dan parameter template menjadi bagian dari signature.

Penentuan tipe receiver mengikuti parameter, deklarasi lokal, field, loop `for` berbasis rentang, dan `auto`, serta melihat ke dalam `unique_ptr`, `shared_ptr`, dan `optional`, sehingga panggilan seperti `conn->send()` diselesaikan ke kelas yang benar. Klausa kelas dasar mengisi pewarisan, dan ekspresi `new` dihitung sebagai instansiasi.

Masking makro ekspor dan anotasi yang sama seperti pada C juga berlaku. Sekitar 273 nama pustaka standar (`std::cout`, `std::endl`, `printf`, dan sejenisnya) difilter dari relasi. Graf mencatat panggilan, include, pewarisan, override, instansiasi, referensi tipe, pembacaan dan penulisan, serta edge `throw`.

## Contoh prompt agen

- "Kelas mana yang meng-override `Renderer::draw`, dan siapa yang memanggilnya?" (`dependency_search`)
- "Tunjukkan `OrderBook::match` dan setiap pemanggilnya." (`find_symbol`)
- "Jelaskan bagaimana pesan data pasar sampai ke mesin strategi." (`get_task_context`)

## Batasan yang diketahui

- `.h` muncul dalam daftar ekstensi C, C++, dan Objective-C, sehingga di pohon kode yang mencampur C dan C++, header terbagi di antara profil-profil tersebut.
- Badan makro mirip objek tidak diurai, dan panggilan ke nama pustaka standar yang difilter bukan edge graf. Gunakan `text_pattern_search` untuk makro dan penggunaan `std::`.

## Langkah berikutnya

Hubungkan repositori dengan [panduan memulai cepat](/id/docs/quickstart), lalu periksa matriks dukungan di [halaman kompatibilitas](/id/docs/compatibility). Jika sebagian pohon kode adalah C murni, baca juga [panduan C](/id/languages/c).

## Detail engine

- Definisi di luar kelas seperti `void Socket::send()` diatribusikan ke kelas pemilik dan namespace-nya, dan anggota virtual dicatat.
- Penentuan tipe receiver mengikuti parameter, variabel lokal, field, `for` berbasis rentang, dan `auto`, serta melihat ke dalam `unique_ptr`, `shared_ptr`, dan `optional`.
- Klausa kelas dasar mengisi pewarisan, ekspresi `new` dihitung sebagai instansiasi, dan sekitar 273 nama pustaka standar difilter dari relasi.

## Titik masuk MCP yang berguna

- `find_symbol`: Gunakan dengan nama yang dikualifikasi penuh seperti `OrderBook::match` saat Anda membutuhkan definisi dan pemanggil.
- `dependency_search`: Sebelum signature berubah, gunakan pada kelas dasar atau metode virtual untuk menemukan override dan pemanggil.
- `get_task_context`: Gunakan untuk prompt seperti “jelaskan bagaimana pesan data pasar sampai ke mesin strategi”.
