مرجع العودة في C++

Mrj Al Wdt Fy C



توفر لغة C++ وسيلة لإرجاع قيمة أو عنوان من خلال مرجعها بدلاً من المؤشرات. يمكن أن يؤدي استخدام المراجع بدلاً من المؤشرات إلى تسهيل قراءة برنامج C++ وإدارته. في لغة C++، ترتبط المراجع والمؤشرات ارتباطًا وثيقًا ببعضها البعض. والفرق الأساسي هو أنه على الرغم من أن المراجع هي مجرد اسم بديل، 'اسم مستعار' لمتغير آخر، إلا أنه يمكن استخدام المؤشرات في عمليات مثل إضافة القيم. المرجع هو اسم بديل أو نسخة مكررة من القيمة الأصلية ويتم الإشارة إليه بالرمز '&'.

مثال 1:

نقوم باستيراد ملف الرأس 'iostream' ثم نستخدم مساحة الاسم 'std'. يتم استيراد ملفات الرأس في رموز C++ حيث يتم تعريف العديد من الوظائف. بعد ذلك، نقوم بإنشاء دالة مرجعية للإرجاع عن طريق وضع الرمز '&' مع اسم الدالة 'returnTheValue'.







هنا، يتم الآن إدراج مرجع 'القيمة'. أسفل هذا، نطبع القيمة والعنوان مع الإشارة إلى '&value'. ثم نضع مرجع الإرجاع ونضع 'القيمة'. الآن، تم استدعاء 'main()' هنا، وقمنا بتهيئة 'n1' بقيمة '44'. أسفل هذا، تتم تهيئة 'int& n2' باستخدام 'returnTheValue(n1)'. الآن، نطبع قيمة 'n1' بالإضافة إلى عنوانه. ثم نقوم بطباعة قيمة 'n2' وكذلك عنوان 'n2' باستخدام 'cout'.



الكود 1:



#تشمل
استخدام اسم للمحطة؛
كثافة العمليات & returnTheValue ( كثافة العمليات & قيمة )
{
cout << 'القيمة =' << قيمة << endl
<< 'عنوان القيمة هو'
<< & قيمة << نهاية؛
يعود قيمة؛
}
انت مين ( )
{
أنت n1 = 44 ;
كثافة العمليات & n2 = returnTheValue ( ن1 ) ;
cout << 'ن1 = ' << ن1 << endl
<< 'عنوان n1 هو'
<< & ن1 << نهاية؛
cout << 'n2 = ' << n2 << endl
<< 'عنوان n2 هو'
<< & n2 << نهاية؛
يعود 0 ;
}


انتاج:





هنا، يمكننا ملاحظة أن المرجع هو مجرد اسم بديل لمتغير آخر كما هو موضح في ما يلي. كعنوان للقيمة، لا يتغير 'n1' و'n2' أبدًا.



مثال 2:

نستخدم مساحة الاسم 'std' بعد استيراد ملف الرأس 'iostream'. بعد ذلك، نستخدم اسم الدالة 'MyReturnValueFunc' والرمز '&' لإنشاء دالة مرجعية للإرجاع. تم وضع الإشارة إلى المتغير 'v1' هنا. نقوم بطباعة القيمة والعنوان مع الإشارة '&v1' أسفل هذا. بعد ذلك، نقوم بإدراج 'مرجع الإرجاع' باستخدام 'return' و'v1' في هذا الموقع. هنا يتم استدعاء 'main()' وتتم تهيئة 'num_1' بقيمة '19'. تتم تهيئة 'int& num_2' باستخدام 'MyReturnValueFunc(num_1)'.

حاليًا، نطبع قيمة وعنوان 'num_1'، وباستخدام 'cout'، نطبع قيمة وعنوان 'num_2'. نقوم الآن بتغيير قيمة 'num_1' من خلال استخدام العنوان الذي يتم إرجاعه هنا بواسطة 'MyReturnValueFunc'. تُرجع هذه الوظيفة الاسم البديل 'v1' وهو أيضًا الاسم البديل 'num_1'. لذلك، قمنا بتغيير قيمتها وجعلها '91'. نقوم بتعيين '91' إلى 'MyReturnValueFunc(num_1)' والذي يعمل كاسم مستعار هنا. ثم نقوم بطباعة القيمة مرة أخرى والعنوان “num_1”.

الكود 2:

#تشمل
استخدام اسم للمحطة؛
كثافة العمليات & MyReturnValueFunc ( كثافة العمليات & الإصدار 1 )
{
cout << 'قيمة v1 =' << الإصدار 1 << endl
<< 'عنوان المتغير v1 هو'
<< & الإصدار 1 << نهاية؛
يعود الإصدار 1؛
}
انت مين ( )
{
كثافة العمليات num_1 = 19 ;
كثافة العمليات & num_2 = MyReturnValueFunc ( num_1 ) ;
cout << 'قيمة num_1 = ' << num_1 << endl
<< ' عنوان num_1 هو '
<< & num_1 << نهاية؛
cout << 'قيمة num_2 = ' << num_2 << endl
<< ' عنوان num_2 هو '
<< & num_2 << نهاية؛
MyReturnValueFunc ( num_1 ) = 91 ;
cout << 'الآن، قيمة num_1 = ' << num_1 << endl
<< 'عنوان num_1 هو'
<< & num_1 << نهاية؛
يعود 0 ;
}


انتاج:

كما هو موضح في ما يلي، يمكننا أن نرى أن المرجع هو مجرد اسم بديل لمتغير آخر لأن عنوان القيم 'v1' و'num_1' و'num_2' ظل ثابتًا:

مثال 3:

يتم استيراد ملف الرأس 'iostream' ويتم استخدام مساحة الاسم 'std'. نظرًا لأنه تم تحديد العديد من الوظائف في ملفات الرأس، فإننا نقوم باستيرادها إلى رموز C++. هنا، نقوم بإنشاء وظيفة 'ReturnRefFun()' حيث نضع فيها 'int& my_ref' الذي يُرجع المرجع. تم الإعلان عن 'int& ReturnRefFun' هنا كوظيفة مرجعية. بعد ذلك، نقوم بزيادة قيمة المتغير “my_ref”. تحت هذا، نضع 'return' الذي يُرجع مرجع 'my_ref'.

بعد ذلك، يتم استدعاء الأسلوب 'main()' هنا. بعد ذلك، نقوم بتهيئة المتغير 'first_value' بـ '21'. أسفل هذا نعيد نسخة المرجع بوضع “first_value” في الدالة “ReturnRefFun” وحفظها في المتغير “copied_value”. ثم نقوم بطباعة كل من 'القيمة_الأولى' و'القيمة_المنسوخة' باستخدام 'cout'. أسفل هذا، نقوم بزيادة المتغير 'copied_value' عن طريق وضع 'copied_value++'. ثم نطبع 'القيمة_المنسوخة' بعد زيادتها و'القيمة_الأولى' باستخدام 'cout'. بعد ذلك، نعيد المرجع بمساعدة تهيئة المتغير “int& ref_value” باستخدام “ReturnRefFun(first_value)”.

بعد ذلك نقوم بطباعة قيمة المتغير “my_ref” الذي قمنا بنسخه. ثم نقوم بطباعة قيمة المتغير “first_value”. تحت هذا، نقوم بزيادة قيمة 'ref_value' عن طريق وضع 'ref_value++'. أسفل هذا، نطبع القيمة المتزايدة لـ “ref_value” وأيضاً متغير “first_value” بمساعدة “cout”. عند تغيير 'ref_value'، ستتغير 'القيمة_الأولى' أيضًا.

الكود 3:

#تشمل
استخدام اسم للمحطة؛
كثافة العمليات & ReturnRefFun ( كثافة العمليات & my_ref ) {
my_ref++;
يعود my_ref;
}
انت مين ( ) {
كثافة العمليات first_value = واحد وعشرين ;
كثافة العمليات Copy_value =ReturnRefFun ( first_value ) ;
cout << 'القيمة الأولى هي:' << first_value << نهاية؛
cout << 'القيمة المنسوخة هي :' << Copy_value << نهاية؛
copied_value++;
cout << 'تتم زيادة القيمة المنسوخة:' << Copy_value << نهاية؛
cout << 'القيمة الأولى :' << first_value << نهاية؛
كثافة العمليات & ref_value =ReturnRefFun ( first_value ) ;
cout << 'القيمة المنسوخة للمرجع:' << ref_value << نهاية؛
cout << 'القيمة الأولى :' << first_value << نهاية؛
ref_value++;
cout << 'تتم زيادة القيمة المرجعية :' << ref_value << نهاية؛
cout << 'القيمة الأولى :' << first_value << نهاية؛
يعود 0 ;
}


انتاج:

هذه هي نتيجة الكود السابق حيث استخدمنا تقنية 'مرجع الإرجاع'. يوضح المثال الفرق بين إرجاع نسخة مكررة من المتغير المرجعي وإرجاع المتغير المرجعي نفسه.

مثال 4:

هنا، يتم تعريف 'int& rByRef' كدالة مرجعية تقوم بإرجاع المتغير المرجعي. نقوم بتمرير 'int& data' إلى وظيفة 'int& rByref ()' هذه. هنا، نطبع عنوان متغير 'البيانات' ثم نستخدم مرجع الإرجاع الموجود أسفله. الآن، نقوم بتهيئة المتغير 'x_var' بعد استدعاء الأسلوب 'main()'. ثم نقوم بطباعة عنوان 'x_var' هنا عن طريق وضع '&x_var' في 'cout'.

تحت هذا، نستخدم المتغير المرجعي عن طريق تعيين 'rByref(x_var)' إلى 'int& y_var'. ثم نقوم أيضًا بطباعة عنوان المتغير المرجعي '&y_var'. أسفل هذا نقوم بنسخ المتغير “x_var” إلى المتغير “z_var” ونقوم أيضًا بطباعة عنوان هذا المتغير المنسوخ وهو “&z_var”. بعد ذلك، نستدعي الدالة “rByref()”، ونمرر المتغير “x_var” كمعامل بداخلها، ونخصص “93” لهذا المتغير. نقوم أيضًا بعرض عنوان 'x_var' مرة أخرى عن طريق وضع '&x_var' في 'cout'.

الكود 4:

#تشمل
استخدام اسم للمحطة؛
كثافة العمليات & rByref ( كثافة العمليات & بيانات )
{
cout << 'عنوان البيانات:' << & بيانات << نهاية؛
يعود بيانات؛
}
انت مين ( )
{
كثافة العمليات x_var = 42 ;
cout << 'عنوان x_var:' << & x_var << نهاية؛
كثافة العمليات & y_var = rByref ( x_var ) ;
cout << 'عنوان y_var: ' << & y_var << نهاية؛
int z_var = rByref ( x_var ) ;
cout << 'عنوان z_var:' << & z_var << نهاية؛
rByref ( x_var ) = 93 ;
cout << 'عنوان x_var:' << & x_var << نهاية؛
يعود 0 ;
}


انتاج:

توضح النتيجة أن عنوان المتغير المستنسخ 'z_var' يختلف عن جميع المواقع الأخرى التي يشير إليها المتغير الأصلي 'x_var'.

خاتمة

يتم استكشاف مفهوم 'مرجع الإرجاع' في هذا البرنامج التعليمي بالتفصيل. لقد تعلمنا أن 'مرجع الإرجاع' يشبه 'المؤشرات' في برمجة C++. ناقشنا أنه للإشارة إلى الدالة التي تُرجع مرجعًا، يجب استخدام الرمز '&' مع نوع الإرجاع الخاص بالوظيفة. قمنا بتوضيح بعض الأمثلة ونتائجها وفهمنا هذا المفهوم في هذا البرنامج التعليمي.