# لغة C++ في Maguyva: رسوم بيانية للفئات والاستدعاءات في قواعد الشيفرة الكبيرة

Canonical source: https://maguyva.ai/ar/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 والرموز والرسم البياني، ليتمكن وكلاء الذكاء الاصطناعي من تتبّع الفئات ونطاقات الأسماء والتجاوزات الافتراضية والمستدعين في قواعد شيفرة C++ الكبيرة.

## لمحة عن الدعم

- المستوى: دعم 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`. تُستخرج الفئات والـ structs والدوال، ويُنسب التعريف خارج الفئة مثل `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++ بين هذه الملفات التعريفية.
- لا تُحلَّل أجسام وحدات الماكرو الشبيهة بالكائنات، والاستدعاءات إلى أسماء المكتبة القياسية المستبعدة ليست حوافَّ في الرسم البياني. استخدم `text_pattern_search` لوحدات الماكرو ولاستخدامات `std::`.

## الخطوات التالية

اربط مستودعًا عبر [دليل البدء السريع](/ar/docs/quickstart)، ثم راجع مصفوفة الدعم في [صفحة التوافق](/ar/docs/compatibility). وإذا كان جزء من الشجرة C صافية، فاقرأ أيضًا [دليل لغة C](/ar/languages/c).

## تفاصيل المحرك

- تُنسب التعريفات خارج الفئة مثل `void Socket::send()` إلى فئتها المالكة ونطاق أسمائها، وتُسجَّل الأعضاء الافتراضية.
- يتتبّع تحديد نوع المستقبِل المعاملاتِ والمتغيراتِ المحلية والحقولَ وحلقات `for` القائمة على النطاق و`auto`، وينظر داخل `unique_ptr` و`shared_ptr` و`optional`.
- تغذّي عبارات الفئات الأساسية الوراثةَ، وتُعدّ تعابير `new` إنشاءً لمثيلات، ويُستبعد من العلاقات نحو 273 اسمًا من المكتبة القياسية.

## نقاط دخول مفيدة عبر MCP

- `find_symbol`: استخدمه مع اسم مؤهَّل بالكامل مثل `OrderBook::match` حين تحتاج إلى التعريف والمستدعين.
- `dependency_search`: قبل تغيير التوقيع، استخدمه على فئة أساسية أو أسلوب افتراضي للعثور على التجاوزات والمستدعين.
- `get_task_context`: استخدمه لمطالبات مثل «اشرح كيف تصل رسالة بيانات السوق إلى محرّك الاستراتيجية».
