C++مفهوم الكونستركتور
- أهمية الكونستركتور في C++
- طريقة استدعاء الكونستركتور في C++
- مثال شامل حول التعامل مع الكونستركتور في C++
أهمية الكونستركتور في C++
من أهم الأشياء التي عليك التفكير بها عند إنشاء كلاس جديد, هي تسهيل طريقة إنشاء كائنات من هذا الكلاس لاحقاً.
من هنا جاءت فكرة الكونستركتور ( Constructor ) و الذي هو عبارة عن دالة, يتم إستدعائها أثناء إنشاء كائن من الكلاس لإعطاء قيم أولية للخصائص الموجودة فيه.
أيّ كلاس تقوم بتعريفه, يملك كونستركتور إفتراضي حتى لو تقم بتعريفه له بنفسك و سبب ذلك أنه لا يمكن إنشاء كائن من كلاس إلا من خلال كونستركتور هذا الكلاس.
لهذا إن لم تقم بتعريف كونستركتور للكلاس بنفسك, فكن على يقين أن مترجم لغة C++ سيقوم بإنشاء كونستركتور إفتراضي فارغ بدلاً عنك عندما تحاول إنشاء كائن من الكلاس.
نقاط مهمة حول الكونستركتور
- كل كلاس يتم إنشاؤه يحتوي على كونستركتور واحد على الأقل. و حتى إن لم تقم بتعريف أي كونستركتور, سيقوم المترجم بإنشاء واحد إفتراضي.
- في كل مرة يتم إنشاء كائن جديد من كلاس, يجب استدعاء كونستركتور من الكلاس حتى يتم إنشاء هذا الكائن.
- القاعدة الأساسية عند تعريف كونستركتور هي أنه يجب أن يحمل نفس إسم الكلاس و يكون نوعه public.
- في حال قمت بتعريف كونستركتور, لن يقوم المترجم بإنشاء واحد إفتراضي, أي لن يعود هناك كونستركتور إفتراضي.
- يمكنك تعريف أكثر من كونستركتور. و يمكنك دائماً إنشاء كونستركتور فارغ, حتى تستخدمه إن كنت لا تريد إعطاء قيم أولية محددة للخصائص عند إنشاء كائن.
في المثال التالي قمنا بتعريف كلاس إسمه Book و لم نقم بتعريف كونستركتور له.
المثال الأول
سيقوم المترجم بإنشاء كونستركتور فارغ بشكل تلقائي عنا كالتالي.
طريقة استدعاء الكونستركتور في C++
عند استدعاء كونستركتور موجود في كلاس, يجب أن تمرر قيمة لكل باراميتر موجود فيه من خلال وضع قوسين بعد إسم الكائن و تمرير القيم فيه.
فيما ويلي وضعنا بعض الأمثلة التي توضح كيفية إستتدعاء كونستركتور من الكلاس.
إذا كان إسم الكونستركتور هكذا Book()
فإنك لا تحتاج فعل أي شيء حين تنشئ كائن من الكلاس حيث تنشئه كالتالي.
المثال الأول
إذا كان إسم الكونستركتور هكذا Book(string title)
فإنك مجبر على تمرير قيمة لكونستركتور الكائن كالتالي عند إنشاءه كالتالي.
المثال الثاني
إذا كان إسم الكونستركتور هكذا Book(string title, string author)
فإنك مجبر على تمرير قيم لكونستركتور الكائن كالتالي عند إنشاءه كالتالي.
المثال الثالث
إذا كان إسم الكلاس يحتوي على كونستركتور فارغ Book()
و كونستركتور يأخذ قيمتين هكذا Book(string title, string author)
فهنا تكون مخيّر على استدعاء الكونستركتور الذي تريده منهما عند إنشاء كائن من الكلاس.
المثال الرابع
مثال شامل حول التعامل مع الكونستركتور في C++
في المثال التالي, قمنا بتعريف كلاس إسمه Book
يمثل المعلومات التي يمكن أن يتضمنها أي كتاب كعنوانه, إسم المؤلف, سعره و عدد صفحاته.
في الكلاس Book
قمنا بتعريف كونستركتور يمكننا من خلاله إدخال قيم مباشرةً للخصائص الموجودة في أي كائن ننشئه من الكلاس.
كما أننا قمنا بتعريف دالة إسمها printInfo()
عند استدعاءها تقوم بطباعة قيم الخصائص التي يمكلها أي كائن ننشئه من الكلاس.
مثال
سنحصل على النتيجة التالية عند التشغيل.