‫أهلا ومرحبا.
‫في هذه المحاضرة ، سنتعلم عن ظاهرة غريبة تسمى المعلمة الخارجية.
‫هذه معلمة بدلاً من تمرير القيمة في C ++ ، فإننا نميل إلى تمرير القيمة من
‫دالة.
‫وسنرى أيضًا شيئًا يسمى مرجعًا ثابتًا وكيف أن هذين المفهومين متشابكان
‫نوعًا ما مع بعضهما البعض.
‫دعونا نتعمق ونكتشف ذلك.
‫حاليا.
‫المكان الحقيقي الذي يشير إلى التألق هو في المعلمات إلى الوظائف ، لأنه في كل مرة ننشئ
‫فيها وقت دلتا عائم مثل هذا في مكوننا التكنولوجي ، ما نفعله هو أننا نأخذ نسخة من ذلك التعويم
‫الأصلي ونقوم بتمريره إلى الوظيفة.
‫لذا بدلاً من القيام بذلك ، ما قد نرغب في القيام به هو أخذ إشارة إليه ونقله بدلاً من ذلك.
‫فلنتخيل أننا سننشئ وظيفة في الجاذبية تسمى تلف الطباعة.
‫وكحجة لهذه الدالة ، نريد تمرير ضرر عائم.
‫الآن ، هذا ، كما قلت ، سوف يقوم بعمل نسخة من كل ما نمرره ونسخه إلى هذا المتغير.
‫قم بإنشاء متغير المعلمة هذا داخل وظيفة تلف الطباعة.
‫ونحتاج أيضًا إلى الحصول على القيمة المرجعة للفراغ هنا أيضًا لإكماله في فاصلة منقوطة في النهاية.
‫دعنا ننتقل إلى C ++ ونواصل هذه المحادثة.
‫لنقم بإنشاء تلف الطباعة هنا.
‫دعنا نضع لك فئة أمامها ودعنا نضع بعض الأقواس بدلاً من الفاصلة المنقوطة.
‫إذاً لدينا نسخة من متغير معامل الضرر وهو آمن لأنني إذا قمت بإحداث ضرر يساوي خمسة ، فأنا
‫فقط أقوم بتغيير هذا المتغير هنا ضمن تلف الطباعة.
‫لدي نسخة منه بنفسي.
‫لا أستطيع أن أفسد الأمر بالصدفة.
‫الآن ، ماذا لو لم أرغب في عمل نسخة؟
‫سيكون بديلي هو أخذ مرجع.
‫لذا ما يمكنني فعله هنا هو أنه يمكنني وضع مرجع عائم في تلف الطباعة ، وأحتاج
‫إلى تحديث ذلك في ملف C ++ أيضًا.
‫وبعد ذلك قد يكون لدي رسالة السجل التي نستخدمها للمرجع ، دعنا نذهب ونأخذ هذا
‫ونضع ذلك في تلف الطباعة.
‫والآن نأخذ الضرر الذي تسببنا به ونطبعه.
‫تقوم المنافذ بتحديث بيان السجل ليقول إن الضرر هو هذا يؤدي إلى إتلاف هذا الضرر وفي مكون التجزئة الخاص بنا ، ما
‫يمكننا القيام به هو أنه يمكننا القيام بطباعة الضرر وتمرير متغير الضرر الخاص بنا ووضع فاصلة منقوطة في النهاية
‫ويمكننا التخلص من مرجع الضرر الخاص بنا في الوقت الحالي ، لأن ما حصلنا عليه الآن هو تعويم الضرر.
‫تم إنشاؤه في TTIC.
‫تم إنشاء ذاكرة لهذا هنا ووضع علامة ثم نذهب ونعطيها لوظيفة تلف الطباعة هذه.
‫ولكن نظرًا لأن المعلمة هي مرجع ، فإننا في الواقع لا ننسخ هذا الضرر.
‫نحن نأخذ عنوانه ونخزنه في المرجع بدلاً من ذلك بحيث عندما نستخدم هذا المرجع أسفل
‫السطر ، فإننا في الواقع نصل إلى الجزء الأصلي من الذاكرة.
‫لذلك لم يكن من الضروري إجراء نسخة لهذا لطباعة التلف.
‫الآن دعنا نتحقق فقط من أن هذا يقوم بالفعل بما نتوقعه.
‫إذا قمت بتغيير قيمة الضرر إلى خمسة ، على سبيل المثال ، ثم أعدت الترجمة والضغط على تشغيل ، فانتقل وألقي نظرة على
‫سجل الإخراج هذا.
‫وبالفعل تحصل الطباعة على أن الضرر خمسة.
‫ولكن نظرًا لأن لدينا مرجعًا ، فإننا نعلم أنه يمكننا تحديث هذه القيمة.
‫لذا ما يمكنني فعله هو أنني أستطيع أن أقول ضمن هذه الوظيفة يمكنني القيام به ، مهلاً ، يجب أن يكون الضرر مساويًا
‫لاثنين مثل ذلك.
‫وإذا لم أكن حريصًا ، إذا اعتقدت أن لدي نسخة خاصة بي ، فقد أعتقد أن هذا جيد.
‫لكن في الواقع في مكون التجزئة ، ما فعلناه هو أننا قمنا بتغيير المتغير الأصلي.
‫لذا ، إذا وضعت سجلاً جديدًا هنا لفحص متغير الضرر الأصلي هذا ووضعنا النسبة المئوية F وقمنا بتجاوز
‫الضرر هنا ، فلنعيش البرمجة ، ونجمع ذلك وسنبدأ اللعب ونلقي نظرة على سجل الإخراج لدينا
‫.
‫ويمكنك أن ترى أنه تم الآن تعديل الضرر والضرر الأصلي.
‫كلاهما تم تغييرهما إلى الرقم الثاني ، وهذا ليس رائعًا.
‫كما تعلم ، يمكن أن تحدث الكثير من الضرر عن طريق الخطأ ، إذا كنت ستعذر التورية ، عن طريق تغيير
‫المتغيرات التي لم تكن تتوقع تغييرها.
‫وهنا يأتي استخدام آخر لتلك الكلمة الرئيسية الثابتة التي رأيناها في الماضي.
‫إذا قمت بوضع ثابت أمام مرجع عائم ، فإن ما أقوله هنا هو أنه يجب أن يكون هذا
‫مرجعًا لا يمكنك تغييره.
‫لا يمكنك استدعاء أي وظائف لا تتعلق بالاتصال به ، ولا يمكنك تعيينها.
‫لا يمكنك بأي شكل من الأشكال تغيير محتويات هذا المتغير.
‫يمكنك فقط استخدامه ، يمكنك قراءته فقط ، يمكنك فقط رؤية ما بداخله.
‫لذلك إذا عدنا إلى الاستيلاء على CPP ، فنحن بحاجة إلى التأكد من أننا وضعنا Const
‫هنا في المعلمات أيضًا ويمكننا المضي قدمًا والتجميع وترى أننا حصلنا على فشل في البناء
‫والخطأ يقول أن الضرر لا يمكن أن يكون مخصص ل لأنه متغير ثابت.
‫وهذا يمنحنا الحماية التي نحتاجها.
‫لذلك بشكل عام ، إذا كنا نحاول تمرير متغير بطريقة فعالة حيث لا نريد أن نأخذ نسخة ، فسنستخدم
‫دائمًا الكلمة الأساسية للاتصال بالإضافة إلى استخدام مرجع لأن هذا
‫يمنعنا من تغيير تلك المحتويات عن طريق الخطأ.
‫ومع ذلك ، في بعض الأحيان تريد استخدامه لتغيير هذه القيمة وما قد نحصل عليه كمثال ، قد يكون لدينا
‫قيمة عائد منطقية وقد نرغب في أن نقول أن هناك ضررًا ، ولكن قد نقوم أيضًا ، كما فعلنا في مخطط في الماضي ، تريد
‫الحصول على قيمة إرجاع ثانية.
‫لذلك قد نقول ، كيف أصابنا أي ضرر وما هو هذا الضرر؟
‫حسنًا ، في هذه الحالة ، من المنطقي استخدام مرجع بسيط غير ثابت ، مرجع عائم إليه.
‫الضرر ، وعادة ما نطلق عليه هذا الضرر فقط لجعله مرئيًا حقًا أن هذا هو ما
‫يُعرف باسم معلمة الخروج.
‫إنه ليس معيارًا لتمرير الأشياء.
‫إنها معلمة لتمرير الأشياء.
‫الآن ، يمكن أن يكون الأمر غريبًا بعض الشيء في C ++ وقد يكون من الصعب اكتشافه.
‫لكن بشكل عام ، إذا رأيت أي معلمات تمثل مرجعًا ولكن لم يتم تمييزها على أنها ثابتة
‫، فيمكنك أن تفترض إلى حد كبير أن شخصًا ما كان ينوي استخدام ذلك كمعامل خارجي.
‫هذا ما لدينا هنا.
‫لقد حصلنا عليه به ضرر.
‫وإذا أردنا أن نذهب وننفذ هذا في CPP ، فيمكننا وضع فئة المختطفين في المقدمة
‫هنا ويمكننا وضع أقواس الأقواس هنا.
‫سنقوم بالتعليق على السطر الموجود في تلف الطباعة حيث لا يكون الأمر سعيدًا لأننا
‫نحاول تعيين مرجع للتكلفة.
‫وما يمكننا القيام به هنا هو أنه يمكننا عمل بعض التعليمات البرمجية ، ويمكننا معرفة ما إذا كان لدينا
‫بعض الضرر ثم نطبع ، نعم ، حسنًا.
‫الضرر الناتج يساوي خمسة.
‫هذا هو الضرر الذي حدث وسنعود.
‫صحيح ، لأننا حصلنا على بعض الضرر الذي حدث وهذا يمكننا الآن استخدامه في مكان
‫ما مثل مكونات القراد لامتصاص الضرر.
‫لذا بدلاً من ضبط الضرر خمسة ، قد نحصل على الضرر ونطبعه إذا كان هناك
‫بعض الضرر ، لذا يمكننا أن نقول شيئًا ما على غرار هذه السطور إذا كان هناك ضرر ثم نمرر في المتغير
‫الذي نريد أن يتم ملؤه بالضرر.
‫إذن ، الضرر ، على سبيل المثال ، ومن ثم يمكننا الحصول على جسم بياننا ويمكننا فقط استدعاء تلف الطباعة
‫، على سبيل المثال ، إذا كان هناك أي ضرر ليتم عرضه ويمكننا إزالة سجل u هذا بالكامل.
‫هذه هي الطريقة التي نستخدم بها المراجع غير الثابتة كمعلمات خارجية ، وهي طريقة للحصول على قيم إرجاع
‫متعددة من دالة.
‫وعندما نفعل ذلك عادةً ، عندما نستدعي هذه الوظيفة ، سننشئ المتغير ، لكننا
‫لن نعطيه قيمة أولية.
‫إذن في السطر 39 ، لقد تم تحديد ضرر تعويم ، قمت بتمريره على الفور في السطر التالي.
‫وهذه علامة أخرى على أنك تستخدم معلمة خارج.
‫لم أعطيها أي قيمة بشكل صحيح قبل أن أنقلها إلى دالة يعني أنني أتوقع أن تضع
‫هذه الدالة القيمة بالنسبة لي.
‫لذلك قد يكون من الصعب تحديد ذلك في البداية ويمكن أن يكون مربكًا بعض الشيء.
‫لكن هاتين هما القاعدتان اللتان أود أن تتذكرهما.
‫إذا رأيت متغيرًا مُعلنًا عنه ولم يُعط قيمة وتم تمريره على الفور إلى دالة ، اسأل نفسك عما إذا كان
‫هذا متغيرًا خارجًا.
‫والقاعدة الأخرى هي أنك إذا رأيت مرجعًا كمعامل ، لكنه ليس ثابتًا ، فقد يكون هذا أيضًا تلميحًا
‫إلى أن هذه معلمة خارج.
‫وبالطبع إذا تم تسمية المتغير أو المعلمة بشيء ما ، فهذه هبة ميتة مفادها أن هذا الشيء من
‫المفترض أن يكون معلمة خارج.
‫أشياء عظيمة.
‫أعتقد أن هذا وضعنا بشكل جيد للغاية لكوننا قادرين على القيام بعملية مسح.
‫سأراكم في المحاضرة القادمة.