هل سبق لك أن تساءلت عن السر وراء إنشاء الكائنات في لغة السي بلس بلس؟ ما إذا كان هناك طريقة مميزة يتم بها تهيئة الكائنات وتعيين قيم افتراضية لخصائصها؟ إنها اللحظة التي تكشف فيها دالة البناء (Constructor) في لغة السي بلس بلس عن قوتها وفائدتها الكبيرة.
دالة البناء هي أساس تصميم الكائنات في لغة السي بلس بلس. فهي تمكّننا من إنشاء كائن جديد من فئة معينة وتعيين خصائصه الأولية وتهيئته بالقيم المناسبة. إنها عبارة عن وظيفة خاصة تحمل نفس اسم الفئة وتستدعى تلقائيًا عند إنشاء الكائن.
تختلف دالة البناء عن الدوال العادية في العديد من النواحي. فهي لا تعيد أي قيمة ولا تحتوي على نوع العودة. بدلاً من ذلك، تهدف دالة البناء إلى تهيئة الكائن وتنفيذ أي عمليات تحضيرية ضرورية قبل استخدامه في البرنامج.
من خلال استخدام دالة البناء، يمكننا تعيين قيم افتراضية للخصائص المختلفة للكائن، وذلك لضمان حصولنا على حالة صحيحة ومُنظَّمة بشكل صحيح. كما يمكننا تنفيذ أوامر إضافية داخل دالة البناء للقيام بالمزيد من العمليات التحضيرية.
إن فهم دالة البناء في لغة السي بلس بلس يعتبر أمرًا حيويًا للمبرمجين، حيث يمكن أن تسهم في تحسين هيكلية وأداء البرامج. ستكتشف أن دالة البناء ليست مجرد وظيفة عادية، بل هي المفتاح لإنشاء كائنات متقنة واستخدامها بكفاءة.
لذا، استعد لاكتشاف سحر دالة البناء وكيف يمكن أن تحوِّل تجربتك في برمجة السي بلس بلس إلى أمر مذهل وسلس.
ما هي دالة البناء (Constructor) في لغة CPP ؟
دالة البناء (Constructor) في لغة السي بلس بلس (C++) هي وظيفة خاصة تحمل نفس اسم الفئة وتستدعى تلقائيًا عند إنشاء كائن جديد من تلك الفئة. تهدف دالة البناء إلى تهيئة الكائن وتعيين قيم افتراضية للخصائص الأولية وتنفيذ أي عمليات تحضيرية أخرى.
إليك بعض النقاط الهامة حول دالة البناء في C++:
- اسم الدالة ونوع العودة: اسم دالة البناء يجب أن يكون مطابقًا لاسم الفئة، ولا يحمل نوع عودة.
- البناء الافتراضي (Default Constructor): إذا لم يتم تعريف دالة بناء خاصة بالمبرمج، فإن اللغة ستقوم تلقائيًا بإنشاء دالة بناء افتراضية فارغة تقوم بتهيئة الكائن.
- دالة البناء المعلنة (Declared Constructor): يمكن للمبرمج تعريف دالة بناء خاصة بالفئة، وهذه الدالة تُستدعى عند إنشاء كائن جديد من الفئة ويمكن استخدامها لتعيين قيم افتراضية للخصائص الأولية وتنفيذ العمليات التحضيرية.
- القواعد المتعلقة بدالة البناء:
- يمكن تعريف عدة دوال بناء لنفس الفئة بشرط أن تختلف في عدد المعاملات أو في نوعها.
- يمكن تعريف دالة بناء بمعاملات افتراضية لتسهيل استخدامها دون تحديد قيم للمعاملات في كل مرة.
- البناء المباشر (Member Initialization): يمكن استخدام قائمة البناء المباشر لتعيين قيم افتراضية للخصائص الأولية عند إنشاء الكائن، وذلك عن طريق تحديد الخصائص وقيمها بين قوسين معاونين بعد قائمة البناء.
دالة البناء في C++ تعتبر جزءًا هامًا من مفهوم البرمجة الكائنية، حيث تسهم في تهيئة الكائنات وتعيين قيم افتراضية وتنفيذ عمليات التحضير اللازمة.
الصيغة العامة لدالة البناء (Constructor)
الصيغة العامة لدالة البناء (Constructor) في لغة السي بلس بلس (C++) كالتالي:
class ClassName {
public:
// Default Constructor
ClassName() {
// Constructor body
}
// Parameterized Constructor
ClassName(parameter1, parameter2, ...) {
// Constructor body
}
// Destructor
~ClassName() {
// Destructor body
}
};
تفسير الصيغة:
ClassName
: اسم الفئة التي يتم تعريفها.Default Constructor
: دالة البناء الافتراضية التي لا تحتوي على معاملات. يتم تنفيذها عند إنشاء كائن جديد من الفئة بدون توفير قيم للمعاملات.Parameterized Constructor
: دالة البناء التي تحتوي على معاملات. يمكن استخدامها لتعيين قيم افتراضية للخصائص الأولية عند إنشاء الكائن، وتتم استدعاؤها بتوفير قيم للمعاملات.Destructor
: دالة الهدم (Destructor) التي تستدعى تلقائيًا عندما يتم هدم كائن من الفئة. يمكن استخدامها لتنفيذ أي عمليات تنظيف أو تحرير موارد قبل هدم الكائن.
ملاحظة: يمكن تعريف عدة دوال بناء ودوال هدم لنفس الفئة بشرط تختلف في عدد المعاملات أو في نوعها. يمكن أيضًا تعريف دوال بناء بمعاملات افتراضية لتسهيل استخدامها دون تحديد قيم للمعاملات في كل مرة.
مثال توضيحي لدالة البناء (Constructor) في لغة CPP
هذا مثال توضيحي لدالة البناء (Constructor) في لغة السي بلس بلس:
#include <iostream>
class Rectangle {
private:
int length;
int width;
public:
// Default Constructor
Rectangle() {
length = 0;
width = 0;
std::cout << "Default constructor called!" << std::endl;
}
// Parameterized Constructor
Rectangle(int len, int wid) {
length = len;
width = wid;
std::cout << "Parameterized constructor called!" << std::endl;
}
// Member function
int calculateArea() {
return length * width;
}
};
int main() {
// Create objects using constructors
Rectangle rectangle1; // Default constructor called
Rectangle rectangle2(5, 3); // Parameterized constructor called
// Calculate areas
int area1 = rectangle1.calculateArea();
int area2 = rectangle2.calculateArea();
// Print areas
std::cout << "Area 1: " << area1 << std::endl;
std::cout << "Area 2: " << area2 << std::endl;
return 0;
}
في هذا المثال، لدينا فئة تسمى Rectangle
تمثل مستطيل. تحتوي الفئة على خاصيتين خاصتين هما length
و width
، وثلاث دوال عامة هما البناء الافتراضي (Default Constructor)، البناء المعلن (Parameterized Constructor)، ودالة حساب المساحة (calculateArea).
في الدالة main
، يتم إنشاء كائنين من الفئة Rectangle
باستخدام دوال البناء. الأول (rectangle1
) يتم إنشاؤه باستخدام البناء الافتراضي، والثاني (rectangle2
) يتم إنشاؤه باستخدام البناء المعلن وتم تمرير قيم للمعاملات.
تُستخدم دوال حساب المساحة لحساب مساحة المستطيلين وتخزينها في متغيرات area1
و area2
على التوالي. ثم يتم طباعة المساحتين في النهاية.
عند تشغيل البرنامج، ستظهر رسائل توضيحية تبين أي دالة بناء تم استدعاؤها.
هذا والسلام عليكم ورحمة الله وبركاته…
( لا تنسا مشاركة الموضوع ليستفيد غيرك )