‫لذلك نعلم أننا نحتاج إلى بعض المكونات في صنفنا الأساسي.
‫نعلم أننا بحاجة إلى شبكة قاعدة للجزء السفلي من الخزان والبرج.
‫نحتاج أيضًا إلى شبكة برج للجزء العلوي.
‫نحتاج إلى كبسولة للتعامل مع الاصطدام ونحتاج إلى نقطة تفرخ المقذوف.
‫سيكون هذا أحد مكونات المشهد.
‫الآن ، بمجرد إضافة هذه الأشياء إلى فئة الكبسولة الأساسية ، فإن أي شيء نقوم بإنشائه بناءً على
‫هذه الفئة سيرث هذه الأشياء.
‫لذلك يمكننا إنشاء خزان على أساس القاعدة - وبعد ذلك يمكننا إنشاء برج قائم أيضًا على القاعدة
‫-.
‫ولأنها تستند إلى قاعدة البود ، فإنها ترث هذه المكونات.
‫يمكن أن يكون للخزان شبكة القاعدة الخاصة به ، وشبكة البرج الخاصة به ، والكبسولة الخاصة به ، ونقطة تفرخ القذيفة الخاصة
‫به.
‫وبالمثل ، سيحصل البرج على مكون كبسولة شبكي للبرج ونقطة انتشار المقذوف
‫أيضًا.
‫وسنرى قريبًا كيف يمكننا تعيين شبكات مختلفة لكل من هذه الشبكات بحيث تبدو مختلفة.
‫نعلم أننا نحتاج إلى بعض المكونات.
‫حان الوقت الآن لإضافة بعض المكونات إلى صنفنا الأساسي.
‫الآن ، بشكل افتراضي ، لدينا بالفعل قسم عام وقسم محمي وقسم عام
‫ثان هنا.
‫هناك أسباب مختلفة لوجود أقسام عامة متعددة وسنتحدث عنها لاحقًا.
‫لكن بالنسبة لمكوناتنا ، سننشئ قسمًا خاصًا.
‫كما تعلمت سابقًا ، من الجيد أن تكون متغيرات الأعضاء خاصة ، وبهذه الطريقة يمكن الوصول
‫إليها فقط من داخل الفصل الذي يمتلكها.
‫لذلك نحن بحاجة إلى بعض المكونات.
‫أول ما سأضيفه هو الكبسولة.
‫لذلك دعونا ننشئ متغيرًا من نوع مكوّن الكبسولة.
‫الآن سيكون هذا مؤشر.
‫سنستخدم المؤشرات لمعظم المتغيرات طالما أنها ليست من الأنواع الأساسية مثل
‫عدد صحيح أو عدد عشري.
‫وكما تعلمون ، ذلك لأن المؤشرات خفيفة الوزن ، فهي مجرد عناوين وتتيح لنا أن
‫نكون أكثر كفاءة.
‫إذن لدينا مؤشر مكون الكبسولة U وسوف نسمي هذه الكبسولة اختصارًا لمكون الكبسولة.
‫الآن فقط فوق مكون الكبسولة ، سنقوم بإضافة ماكرو غير حقيقي خاص بالمحرك وستكون ملكيتك بأحرف
‫كبيرة مع أقواسها الخاصة.
‫ملكيتك هي وسيلة لجعل المحرك غير الحقيقي على دراية بهذا المتغير حتى يتمكن من المشاركة في محركات غير حقيقية.
‫نظام الانعكاس.
‫يتيح لنا نظام الانعكاس القيام بأشياء مثل تعريض هذا المتغير للمخططات والمشاركة في جمع
‫القمامة وأشياء من هذا القبيل.
‫لذا فإن إضافة الخاصية الخاصة بك ستكون شيئًا سيضيف إلى مكوناتنا أثناء إنشائها.
‫إذن لدينا مكون الكبسولة هذا ولأننا نستخدم نوع مكون الكبسولة YOU ، نحتاج
‫إلى إعلام المترجم بهذا النوع.
‫لا يعرف بشكل افتراضي ما هو مكون الكبسولة.
‫الآن عادة لإخبار المترجم ما هو مكون الكبسولة ، سنقوم بتضمين ملف رأس هنا في الأعلى مع توجيهات
‫التضمين الخاصة بنا إذا انتقلنا إلى وثائق المحرك غير الواقعية وبحثنا عن
‫مكون الكبسولة الخاص بك ، يمكننا أن نرى هنا حيث يقول قم بتضمين ملف الرأس الذي سنحتاج
‫إلى تضمينه لإخبار المترجم عن مكون الكبسولة.
‫الآن يمكننا تضمين هذا هنا في الأعلى ثم لدينا U.
‫سيتم التعرف على نوع مكون الكبسولة من قبل المترجم وسيكون كل شيء رائعًا.
‫لكن الممارسة الجيدة العامة عندما يتعلق الأمر بتشفير هذه الأشياء هي محاولة إبقاء ملف الرأس
‫هذا صغيرًا قدر الإمكان.
‫عندما نقوم بتضمين ملف رأس في هذا الملف ، يأخذ برنامج يسمى preprocessor جميع محتويات
‫ملف الرأس هذا ، ويزيل بعض الأشياء مثل التعليقات ، ثم يلصق حرفيًا جميع
‫محتويات ملف الرأس هذا في هذا الملف.
‫والنتيجة هي أن هذا الملف يكبر لأنه يحتوي على محتويات ذلك الملف المضمن والصقه
‫هنا.
‫نريد فقط تضمين الأشياء عندما نستخدمها.
‫إذن كيف نبتعد عن عدم تضمين ملف الرأس هنا في القاعدة - الرأس؟
‫حسنًا ، يمكننا استخدام شيء في C ++ يُعرف باسم التصريح الأمامي.
‫نعلن عن نوع مكون الكبسولة u هذا باستخدام الكلمة الأساسية للفئة مثل هذه.
‫لاحظ أن المترجم يظهر الآن هذا النوع باللون الأخضر عندما نعلن أن متغيرًا كان قادرًا على الابتعاد
‫عن عدم تضمين ملف الرأس الخاص به.
‫إنه يخبر المترجم أن هذا نوع لذلك لن يعطينا أخطاء IntelliSense بعد الآن ، قائلاً
‫إنه لا يتعرف على هذا كنوع.
‫الآن هذا نوع غير مكتمل.
‫إذا حاولنا بالفعل استخدام هذا النوع إما عن طريق الوصول إلى أعضاء مثل الوظائف والمتغيرات أو
‫محاولة إنشاء كائن من هذا النوع ، فسنحصل على خطأ لأنه نوع غير مكتمل.
‫سنحتاج إلى تضمين ملف الرأس في أي مكان نستخدم فيه هذا النوع للقيام بهذه الأشياء حتى نتمكن من إعادة توجيه
‫إعلان مؤشر من النوع لتجنب الحاجة إلى ملف الرأس.
‫لكن من المهم ملاحظة أننا نحتاج إلى ملفات رأس للتوريث من فئات معينة.
‫لاحظ أن هذه الفئة ترث من بركة وأن ملف رأس البركة مضمن هنا في الأعلى.
‫لذا تتطلب الوراثة ملف الرأس للنوع الذي نرث منه.
‫لذلك دعونا نناقش الإعلان المسبق ولماذا نريد القيام به.
‫لنفترض أن لدينا فئة تسمى Base Pon والتي تحتاج إلى متغير مؤشر من نوع مكون الكبسولة.
‫الآن أنت مكون الكبسولة موجود في ملف رأس مكون الكبسولة.
‫الآن سنستخدم هذا النوع في الواقع بناءً على الوقت الذي نبني فيه كائنًا من U.
‫نوع مكون الكبسولة.
‫لذلك ، بناءً على كل ما نحتاجه حقًا هو أن يكون لدينا مؤشر مكون كبسولة من النوع U.
‫الآن تعتمد الحقيقة على H لا تحتاج في الواقع إلى تفاصيل تنفيذ فئة مكون الكبسولة.
‫بمعنى آخر ، لا يحتاج إلى معرفة كيفية تعريف الوظائف أو حتى حجم فئة مكون
‫الكبسولة.
‫يكون مؤشر مكون الكبسولة بنفس حجم أي مؤشر آخر.
‫إنه مجرد عنوان.
‫الآن في فئة الخطة الأساسية.
‫نريد بناء مكون الكبسولة.
‫لهذا السبب ، نحتاج إلى معرفة حجم مكون الكبسولة من أجل وضع الذاكرة اللازمة لإنشاء
‫هذا الكائن.
‫لذلك في حين أن رأس مكون الكبسولة ليس مطلوبًا بشكل صارم في قاعدة Ponca ، فهو مطلوب تمامًا في القاعدة.
‫تتمثل ممارسة البرمجة الجيدة لـ Porkpie في تضمين الرؤوس فقط في الأماكن التي تحتاج إليها فعليًا حتى
‫نتمكن من الإفلات من الإعلان عن مؤشر مؤشر مكون كبسولة من النوع U في المنتج الأساسي H ثم تضمين
‫مكونات الكبسولة حيث نحتاج إلى تفاصيل التنفيذ لأننا نبني مكون كبسولة ونحتاج إلى
‫معرفة حجم a.
‫مكون الكبسولة في الذاكرة.
‫الآن دعنا نناقش عواقب تضمين ملف header في base pond FX بدلاً من ذلك.
‫كما رأينا ، يمكننا فعل ذلك تمامًا وقد تفكر ، حسنًا ، نحن ندرجه في قاعدة pont
‫CP على أي حال ، فما الفرق الذي سيحدثه إذا قمنا بتضمينه في ملف مقابل آخر؟
‫الآن هنا يأتي دور المشكلة.
‫تم تصميم ملفات الرأس بحيث يتم تضمينها بواسطة ملفات أخرى.
‫لنفترض أن لدينا Base Pond H وقمنا بتضمين مكونات كبسولة فيه.
‫وبعد ذلك في الطريق ، لدينا فئة أخرى وسيكون لدينا مؤشر بركة القاعدة في فئة أخرى
‫، تمامًا كما كان لدينا مؤشر مكون كبسولة في حجرة القاعدة.
‫الآن ، بدلاً من الخوض في مشكلة التصريح عن مؤشر البركة الأساسية وبعض الفئات
‫الأخرى ، سنقوم فقط بإعلانها على أنها عادية وتضمين بيدق القاعدة في فئة أخرى.
‫لذلك ، لا يقتصر دور Base Pond H على تضمين رأس مكون الكبسولة فقط ، مما يؤدي إلى نسخ المزيد من التعليمات البرمجية
‫في ملف الرأس هذا.
‫الآن بعض الفئات الأخرى لها أساس ، والتي تتضمن مكون الكبسولة.
‫لذا فإن كل المحتويات ومكونات الكبسولة موجودة أيضًا داخل فئة أخرى من الفئة H وليست هناك حاجة
‫لها هناك.
‫بعض الفئات الأخرى التي يحتاج H فقط إلى معرفتها حول القاعدة لا تهتم بمكون الكبسولة.
‫لنفترض الآن أننا نواصل هذا النمط وأنشئ فئة أخرى تسمى فئة أخرى ، ومع ذلك قد تحتاج
‫فئة أخرى إلى مؤشر من نوع فئة أخرى الآن بدلاً من التصريح الأمامي.
‫نقوم فقط بتضمين فئة H أخرى في فئة H أخرى والآن داخل فئة أخرى H.
‫على الرغم من أننا لا نحتاج حتى إلى رأس البركة الأساسية أو مكون الكبسولة H ، فقد حصلنا عليه
‫في فئة أخرى لأن بعض الفئات الأخرى تتضمن ملفات الرأس تلك بداخلها.
‫لذلك لدينا نسخ من جميع محتويات مكونات الكبسولة وعلى أساس H عالق هنا في فئة أخرى ، مما يؤدي
‫إلى تضخيم هذا الملف وزيادة أوقات التجميع لأننا لم نقم بإعادة الإعلان.
‫لذا ، بدلاً من ذلك ، فإن أفضل ما يجب فعله هو تضمين ملفات الرأس حيث تكون هناك حاجة فعلية إليها.
‫لذلك إذا أخذنا مكونات الكبسولة وقمنا بتضمينها فقط بناءً على CPP ، ثم في وقت لاحق على الطريق عندما
‫أنشأنا فئة أخرى ونحتاج بالفعل إلى استخدام جراب القاعدة ، يمكننا تضمين الرأس
‫هناك والقاعدة التي لا تتضمن مكونات الكبسولة ، لذلك لم يتم تضمين كل هذا الرمز الإضافي في فئة أخرى.
‫وبعد ذلك عندما نذهب وننشئ فصلًا آخر يحتاج إلى فصل آخر ، يمكننا
‫تضمين فئة أخرى هي h في فصل آخر هو CPP حيث تكون هناك حاجة فعلية له ، ثم فصل
‫آخر لا يمتلئ H بمحتوياته. ملفات رأس أخرى لا يحتاجها.
‫لذلك عندما تحتوي الفئات على تبعيات مثل هذه تعتمد على مكون الكبسولة ، فمن الأفضل الاحتفاظ بهذه التبعيات
‫إلى الحد الأدنى.
‫لذلك سوف أتحداك لإنشاء خطأ تجميع.
‫لا ينبغي أن نخاف من أخطاء الترجمة.
‫إنها مجرد جزء طبيعي من عملية التطوير.
‫لذلك سنقوم بإنشاء واحدة عن قصد للعودة وإزالة الكلمة الأساسية للفصل وتجميعها دون الإعلان
‫عن مركبات الكبسولة.
‫الآن عندما أقول التحويل البرمجي ، أعني أنه يمكنك التحويل من كود Visual Studio ، مجرد تجميع C ++ عادي.
‫لقد تعلمت كيفية القيام بذلك ، أو يمكنك ببساطة حفظ ملفك ورمز Visual Studio وبدء الترميز
‫المباشر.
‫إما أن يكون أحدهما جيدًا وبمجرد أن نمر في هذا معًا ، سأوضح لك ما يحدث بكلتا الطريقتين.
‫إذا كنت تستخدم الترميز المباشر ، فبالطبع ستنظر إلى الإخراج الذي تم إنشاؤه في نافذة الترميز
‫المباشر بدلاً من الإخراج الذي قد تراه في التعليمات البرمجية لـ Visual Studio.
‫الآن المفسد ، ستحصل على خطأ في التجميع ، انظر إلى رسالة خطأ التجميع ، وانظر
‫ما تخبرك به.
‫هذا مجرد التعرف على الأخطاء التي ننتجها.
‫ثم بعد ذلك ، عد للأمام والخلف ، أعلن عن شركات الكبسولة باستخدام الكلمة الأساسية للفصل.
‫بمجرد القيام بذلك ، قم بالتجميع مرة أخرى ، يجب أن تحصل على تجميع ناجح هذه المرة.
‫أوقف الفيديو وجرب هذه المحاولة.
‫حسنًا ، لذلك دعونا نحدث بعض الخراب في الكود الخاص بنا هنا.
‫سأقوم بإزالة الكلمة الأساسية للفصل.
‫حسنًا ، لقد حاولنا التحويل البرمجي ، وها هو الناتج في المحطة.
‫أول شيء نراه هو الخطأ ويعطينا رمز خطأ ويقول إن شركات الكبسولة ليست عضوًا
‫في بيدق أساسي.
‫لدينا ملاحظة تنص على إعلان C عن بيدق أساسي ثم نرى أننا حصلنا على أخطاء أخرى نتيجة
‫لذلك.
‫لذلك في كثير من الأحيان سيشعر الطلاب بالارتباك عندما يحاولون التجميع ويبدو أنهم أخطاء متعددة.
‫لذلك يوضح هذا أن خطأ واحدًا يمكن أن ينشر سلسلة من الأخطاء.
‫وهذا لا يعني أنه عليك الذهاب وإصلاح مجموعة كاملة من الملفات.
‫يمكن أن يكون للخطأ أصل واحد هنا.
‫نحن نعلم ما هو أصل الخطأ.
‫نحن بحاجة إلى إعادة الإعلان.
‫الآن دعنا نرى ما سيحدث إذا استخدمنا الترميز المباشر بدلاً من التجميع العادي ورمز Visual Studio.
‫لذلك سأقوم بالضغط على الزر لبدء البرمجة الحية وعلى الفور باللون الأحمر أرى
‫أن البناء فشل ونرى نفس الشيء هنا.
‫هنا.
‫شركة الكبسولة ليس عضوًا في ورقة البيدق الأساسية.
‫انظر إلى إعلان البيدق الأساسي.
‫لذلك نرى نفس الشيء هنا.
‫لذلك في كلتا الحالتين سنشاهد خطأ مثل هذا عندما ننسى إعادة توجيه الإعلان.
‫والآن نحن نعرف كيف يبدو الأمر ، والآن أصبحنا أكثر إطلاعًا وأقل خوفًا من رسائل خطأ التجميع
‫الغامضة هذه.
‫لذا ما سنفعله هو إصلاح هذا الخطأ عن طريق إعادة توجيه إعلان مكون الكبسولة ، ومن ثم يمكننا محاولة
‫التجميع مرة أخرى.
‫والآن قمنا بالتجميع دون أي أخطاء.
‫والآن نرى كيف يبدو الأمر عندما نسينا إعادة توجيه إعلان متغير.
‫ضع ذلك في الاعتبار عندما تحصل على أخطاء في المترجم في المستقبل.
‫لذلك ، باختصار ، ناقشنا التصريح الأمامي عند إنشاء مؤشر جديد وتعلمنا
‫أنه يجب عليك فقط تضمين ما تستخدمه في ملف CP ويجب علينا تضمين أقل قدر ممكن في الملف
‫H.
‫نحن نعلم أننا لسنا بحاجة إلى ملف الرأس للإعلان عن مؤشر جديد طالما أننا نعيد التصريح
‫وأننا نحتاج إلى ملف الرأس إذا كنا سنقوم ببناء كائن من نوع معين.
‫ونحتاج إلى ملف الرأس للوصول إلى الأعضاء مثل الوظائف والمتغيرات ورأينا أننا
‫في الواقع بحاجة إلى ملف الرأس للوراثة من الفصل.
‫نحن بحاجة إلى ملف الرأس هذا هناك.
‫والآن بعد أن عرفنا كيفية إعادة توجيه إعلان النوع ولدينا مركب كبسولة المؤشر ، فنحن مستعدون
‫بالفعل لبناء كائن مكون كبسولة وسنفعل ذلك في الفيديو التالي.
‫سأراك قريبا.