كيفية تنفيذ Call by Reference في C ++



ستزودك هذه المقالة بمعرفة دقيقة عن Call by Reference في C ++ مع التطبيقات وكيف تختلف عن Call by Value.

لا يعد العمل باستخدام C ++ مهمة صعبة إذا كان لديك بالفعل خلفية في C حيث يشترك كلاهما في الكثير من المفاهيم مع بعضهما البعض. لكن C ++ بها بعض المفاهيم التي ليست جزءًا من نموذج C. في مقالة Call by Reference في C ++ ، سنتحدث عن أحد هذه المفاهيم وهو المتغيرات المرجعية وتطبيقاتها بالترتيب التالي:

المتغيرات المرجعية

يمنحنا C ++ نوعًا جديدًا من المتغيرات ، أي متغير مرجعي. يمكننا التفكير في المتغير المرجعي كلقب لمتغيرنا الأصلي. هذه هي الوظيفة الدقيقة لمتغير مرجعي في سطر واحد.





على سبيل المثال ، إذا كان اسمك هو Harrison ولكن في المنزل ، فإن أفراد عائلتك ينادونك Harry. دعنا الآن ننتقل إلى بعض تفاصيل المتغيرات المرجعية. يختلف تعريف واستخدام هذا النوع من المتغيرات عن المتغيرات المعتادة التي نستخدمها ولكنها تشبه إلى حد كبير متغيرات المؤشر.

بناء الجملة:



مرحبا int = 1 int * ptr int & World = Hello

عندما ننشئ متغيرًا 'مرحبًا' يحتوي على القيمة '1' ، يتم استخدام جزء من الذاكرة للتخلص من القيمة '1' ، سيكون اسم هذه الشريحة 'مرحبًا' وسيكون عنوان هذه الشريحة عبارة عن قيمة سداسية عشرية على سبيل المثال0x64. عندما نكتبint& العالم = مرحبًايتم إنشاء متغير 'العالم' والذي يشير إلى نفس موقع الذاكرة.

سيؤدي تضمين السطر World ++ إلى إجراء تغييرات في العنوان 0x64 وهذا يعني أن قيمة المتغير 'Hello' ستتغير أيضًا. قد يشير البعض إلى كيف حالك تختلف المتغيرات المرجعية عن متغيرات المؤشر التي سنناقشها في الجزء الأخير من هذا المنشور.

الاتصال حسب القيمة والدعوة حسب المرجع في C ++

اتصل بالقيمة: Call by Value طريقة مستخدمة على نطاق واسع. في معظم الأحيان ستستخدم نهج الاستدعاء حسب القيمة لأنك لا تريد تغيير القيم الأصلية للمتغيرات. ومن ثم استخدمنا طريقة الاستدعاء حسب القيمة لاستدعاء دالة ، يتم تمرير قيم المتغيرات فقط. يتم تحقيق ذلك عن طريق إنشاء متغيرات وهمية في الذاكرة.



# تضمين باستخدام إضافة مساحة الاسم std void add (int a، int b) {a = a + 10 b = b + 10 cout<<'Value of a = '<  الاتصال حسب القيمة في C ++

من الصورة أعلاه ، يمكننا أن نرى أنه بمجرد استدعاء الدالة add () ، يتم نسخ قيم متغيري x و y إلى المتغيرين a و b. A و b متغيرات وهمية.

دعوة حسب المرجع: الآن ، لنتحدث عن المكالمة بطريقة مرجعية. في هذه الطريقة لا يتم إنشاء متغيرات وهمية منفصلة ، يتم تمرير مرجع لمتغير موجود بالفعل إلى الطريقة. يشير هذا المرجع إلى نفس موقع الذاكرة وبالتالي لا يتم عمل نسخ منفصلة في الذاكرة. النقطة المهمة التي يجب ملاحظتها هنا هي أن التغييرات التي تم إجراؤها في المتغيرات المرجعية تنعكس في المتغير الوهمي.

ماذا تفعل الوتر في جافا
# تضمين باستخدام إضافة مساحة الاسم void add (int & a، int & b) {a = a + 10 b = b + 10 cout<<'Value of a = '< int & min (int & a، int & b) {if (a 

كما يمكننا أن نرى أن الوظيفة أعلاه تبدو مختلفة مقارنة بالوظائف العادية لأن نوع الإرجاع هو 'int &'. ترجع هذه الدالة مرجعًا إلى a أو b وفقًا للحالة. النقطة المهمة التي يجب ملاحظتها هنا هي أن القيملم يتم إرجاعها.

إذا استدعينا الدالة min (x، y) = 10. فسيتم إسناد 10 إلى x إذا كان الحد الأدنى أو y إذا كانت y هي الحد الأدنى.

استدعاء من خلال المرجع مقابل المؤشر

في جميع الأمثلة التي رأيناها ، قمنا دائمًا بتعيين قيمة للمتغير المرجعي الذي أنشأناه لأن المتغيرات المرجعية لا يمكن أن تكون فارغة بينما يمكن أن تكون متغيرات المؤشر فارغة ويمكن أن تسبب أخطاء غير متوقعة.

لا يمكن إعادة تعيين المتغيرات المرجعية بينما يمكن أن تشير متغيرات المؤشر إلى متغير آخر لاحقًا في البرنامج.

متغير المؤشر يحمل قيمة العنوان لمتغير معين بينما عنوان المتغير المرجعي هو نفسه المتغير الذي يشير إليه.

بهذا نصل إلى نهاية مقالة Call By Reference في C ++. أتمنى أن تكون قد فهمت التنفيذ المختلف للدعوة حسب القيمة والمرجع وكيف يختلف كلاهما.

إذا كنت ترغب في معرفة المزيد ، تحقق من بواسطة Edureka ، شركة تعليمية موثوقة عبر الإنترنت. تم تصميم دورة تدريب وإصدار شهادات Java J2EE و SOA من Edureka لتدريبك على مفاهيم Java الأساسية والمتقدمة جنبًا إلى جنب مع العديد من أطر Java مثل Hibernate & Spring.

لديك سؤال لنا؟ يرجى ذكر ذلك في قسم التعليقات في هذه المدونة وسنعاود الاتصال بك في أقرب وقت ممكن.