كيف يتم تنفيذ Copy Constructor في C ++؟

لقد كان فهم المنشئين لغزا بالنسبة للكثيرين. ستساعدك هذه المقالة في إزالة الغموض عن مفهوم Copy Constructor In C ++

فهم المنشئون كان لغزا بالنسبة للكثيرين. ستساعدك هذه المقالة في إزالة الغموض عن مفهوم Copy Constructor In C ++. سيتم تغطية المؤشرات التالية في هذه المقالة ،

البرنامج التعليمي ssis خطوة بخطوة

لذلك دعونا نبدأمع هذه المقالة على Copy Constructor في C ++





مُنشئ النسخ هو مُنشئ يقوم بتهيئة كائن من فئة باستخدام كائن آخر من نفس الفئة.

بناء الجملة:



لدينا الكلمة الأساسية const لأننا نريد أن نجعل القيمة ثابتة ونتأكد من عدم تعديلها في مكان ما في الكود. مثل المُنشئ الافتراضي ، يتم توفير مُنشئ النسخ أيضًا بواسطة المترجم. هذا يسمى مُنشئ النسخ الافتراضي. يمكن جعل منشئي النسخ خاصين. لا يمكننا نسخ كائنات الفئة عندما نجعل منشئ النسخ خاصًا.

هنا مثال على الكود :

#include using namespace std class test {private: int x public: test (int x1) {x = x1} test (const test & t2) {x = t2.x} int getX () {return x}} int main () {test t1 (7) // يسمى المُنشئ العادي هنا test t2 = t1 // يسمى مُنشئ النسخ هنا cout<< 't1.x = ' << t1.getX() cout << 'nt2.x = ' << t2.getX() return 0 } 

انتاج:



منشئ نسخ الإخراج في C ++ - Edureka

تفسير

البرنامج أعلاه هو عرض توضيحي أساسي لمنشئ نسخة. لدينا اختبار فئة ، مع عضو بيانات خاص من النوع int يسمى x. ثم لدينا مُنشئ ذو معلمات ، والذي يعين 7 للمتغيرات x. لدينا نسخة منشئ ، والتي تقوم بإنشاء مثيل لقيمة t2 بقيمة t1. يتم إرسال عنوان t2 الذي يحمل قيمة t1 ويتم تعيينه إلى x. توجد دالة get تُرجع قيمة x.

الوظيفة الرئيسية لها كائن اختبار فئة يسمى t1. هناك قيمة مرتبطة بهذا الكائن ، هذه معلمة. الوظيفة الرئيسية لها كائن آخر لاختبار الفئة يسمى t2. تتم تهيئة هذا باستخدام المتغير t1 ويتم استدعاء مُنشئ النسخة هنا. أخيرًا ، يتم استدعاء دالة get بالنسبة إلى t1 و t2 للحصول على قيمة x.

ما هي وظيفة التحميل الزائد في سي ++

أنواع

هناك نوعان من مُنشئ النسخ.
⦁ منشئ نسخة ضحلة
⦁ نسخة عميقة منشئ

الانتقال إلى هذه المقالة حول Copy Constructor في C ++

مُنشئ نسخة غير عميقة:

مُنشئ النسخة السطحية هو مُنشئ نسخ افتراضي.

مثال:

يقوم شخصان بالوصول إلى قاعدة البيانات في نفس الوقت وإجراء تغييرات على القيم عبر نظامين مختلفين. إذا قاموا بإجراء تغييرات على قاعدة البيانات ، فسيتم عرض هذين التغيرين في قاعدة البيانات. سيشير كلا الجسمين إلى نفس موقع الذاكرة. هذا مُنشئ نسخة ضحلة. يحدث هذا غالبًا عندما نعمل مع مُنشئ النسخ الافتراضي. فيما يلي مثال على رمز لـ: مُنشئ النسخ الضحلة:

#include using namespace std class test {public: int y، z test (int y1، int z1) {y = y1 z = z1}} int main () {test a (7،13) cout<<'the sum is: '<< a.y+a.z return 1 } 

انتاج:

مجموعة php print_r

تفسير:

في الكود أعلاه ، نستخدم مُنشئ النسخ الافتراضي الذي يوفره المترجم. ومن ثم فهو منشئ نسخة ضحلة.

الانتقال إلى هذه المقالة حول Copy Constructor في C ++

مُنشئ نسخة عميقة

Deep Copy Constructor هو مُنشئ نسخ معرف بواسطة المستخدم.
فمثلا:
عندما يتعين على شخصين تقديم عرض تقديمي وكلاهما يقوم بالنسخ من نفس المصدر ، تكون النسخ منفصلة. لذلك ، عند إجراء تعديلات ، لا تتأثر النسخة الأخرى فقط. هذا هو Deep Copy Constructor. سيشير كلا الجسمين إلى مواقع ذاكرة مختلفة ولن يكون للتغييرات في أحدهما أي تأثيرات على الآخر. يتم تخصيص الذاكرة ديناميكيًا.

فيما يلي مثال على رمز لـ: Deep Copy Constructor:

#include using namespace std class test {private: int x public: test (int x1) {x = x1} test (const test & t2) {x = t2.x} int getX () {return x}} int main () {test t1 (7) // يسمى المُنشئ العادي هنا test t2 = t1 // يسمى مُنشئ النسخ هنا cout<< 't1.x = ' << t1.getX() cout << 'nt2.x = ' << t2.getX() return 0 } 

انتاج:

تفسير

هذا هو نفس الكود الذي استخدمناه أعلاه ، مما يعطي مخرجات مماثلة. إنه مُنشئ نسخ محدد من قبل المستخدم ، وبالتالي فهو مُنشئ نسخ عميق.

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

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