منشئ النسخ
في لغة C++، تسمى الوظيفة التي تحمل نفس اسم الفئة والتي تعد معلماتها الرسمية أنواعًا مرجعية لكائنات هذه الفئة مُنشئ نسخة ، مثل المُنشئ، سيقوم النظام تلقائيًا بإنشاء واحدة عندما لا نقوم بتعريفها بشكل نشط. تنفيذ مهام بسيطة مقابلة بين عضوين من الكائنات، تُستخدم لتهيئة كائن، مثل الموقف التالي:
#include<iostream>usingnamespacestd;#definePI3.1415classCircle{private:doubleR;public:Circle(doubleR);Circle(Circle&A);doublearea();doublegirth();};Circle::Circle(doubleR){cout<<Constructor <<endl;this->R=R;}Circle::Circle(Circle&A){cout<<CopyConstructor<<endl;this->R=AR;}doubleCircle::area(){returnPI*R*R;} doubleCircle::girth(){return2*PI*R;}intmain(){CircleA(5);CircleB(A);return0;}
في هذا المثال، يتم تعريف فئة الدائرة، ويتم تعريف المُنشئ ذو المعلمات ومنشئ النسخ على التوالي، ثم يتم تعريف الكائن A في الوظيفة الرئيسية، ويتم تمرير القيمة الأولية، ويتم استدعاء المُنشئ ذو المعلمات. وقم بتعريف الكائن B، وقم بتهيئة الكائن B من خلال الكائن A. نتائج التشغيل هي كما يلي:
يستدعي الكائن A المحدد لأول مرة المُنشئ باستخدام المعلمات، وتتم تهيئة الكائن B الثاني من خلال الكائن A، لذلك يتم استدعاء مُنشئ النسخ.
يرجى أيضًا تجربته على جهاز الكمبيوتر الخاص بك.
قد تكون لديك أسئلة في البداية ذكرنا أنه إذا لم نحدد مُنشئ النسخ بشكل فعال، فسيتم إنشاء واحد تلقائيًا لنا، فلماذا يتعين علينا تعريفه بأنفسنا؟ وذلك لأن مُنشئ النسخ الافتراضي لا يؤدي إلا مهام بسيطة، وفي بعض الحالات قد تحدث مشكلات، وهذا يتضمن النسخ العميق والنسخ السطحي ، وسنقدمه لك بالتفصيل في القسم التالي.