الكائن الثابت Constant Object ودالة العضو الثابتة Constant Member Function
المقدمة
في لغة C++، المتغير الثابت هو متغير لا يمكن تغيير قيمته بمجرد تهيئته. تظل القيمة ثابتة طوال تنفيذ البرنامج. يتم الإعلان عن المتغيرات الثابتة باستخدام الكلمة الأساسية const.
ثابت الكائن Constant Object
- الإعلان: يتم الإعلان عن كائن ثابت باستخدام الكلمة الأساسية const مع نوع الكائن.
- غير قابل للتغيير: بمجرد إعلانه كـ const، لا يمكن تغيير متغيرات أعضاء الكائن.
- استدعاء دوال الأعضاء: يمكن للكائن الثابت فقط استدعاء دوال الأعضاء الثابتة من فئاتها. وهذا يمنع أية عمليات قد تؤدي إلى تعديل الحالة الداخلية للكائن.
دالة العضو الثابتة Constant Member Function
- الإعلان: يتم الإعلان عن دالة العضو على أنها ثابتة عن طريق إلحاق الكلمة الأساسية const بإعلانها وتعريفها.
- ضمان عدم التعديل: تضمن دالة العضو الثابت ضمنيًا بعدم تعديل أي من أعضاء البيانات غير الثابتة في فئتها.
- فرض الصحة: وهذا يساعد المترجم على فرض الصحة ويمنع الآثار الجانبية غير المقصودة.
مثال
#include <iostream> using namespace std; class time { private: int h, m, s; public: void print() const //constant function { cout << "Time = " << h << ":" << m << s << endl; } time(int i, int j, int k) { h = i; m = j; s = k; } }; int main() { const time noon(12, 0, 0); //constant object noon.print(); return 0; }
في الكود المقدم، تلعب كل من الدوال الثابتة والكائنات الثابتة أدوارًا مهمة:
الدالة الثابتة (print() const):
- تم تعريف دالة العضو print() على أنها const، مما يجعلها دالة عضو ثابتة.
- تضمن دالة العضو الثابت عدم تعديل حالة الكائن الذي يتم استدعاؤه عليه. يعد بعدم تعديل أي متغيرات أعضاء غير ثابتة للفئة.
- في هذا الكود، تكون الدالة print() مسؤولة عن عرض الوقت المخزن في كائن الوقت. نظرًا لأنه لا يعدل حالة الكائن، يتم تعريفه على أنه const.
- من خلال الإعلان عن print() كدالة عضو ثابتة، فإنها تسمح للكائنات الثابتة باستدعاء هذه الدالة.
الكائن الثابت (const time noon(12, 0, 0)):
- يتم إنشاء كائن يسمى noon للـclass time وإعلانه على أنه const. وهذا يجعل noon كائنًا ثابتًا.
- الكائن الثابت هو كائن لا يمكن تعديل حالته بعد التهيئة. أي محاولة لتعديل حالته ستؤدي إلى خطأ في الترجمة.
- في هذا الكود، يمثل كائن noon وقتًا محددًا، 12:00:00، ولا يمكن تغييره بمجرد إنشائه.
- تكون الكائنات الثابتة مفيدة عندما تريد التأكد من بقاء حالة الكائن دون تغيير طوال عمره، مما يوفر ضمانات بالثبات والأمان.
- من خلال الإعلان عن noon ككائن ثابت، فإنه يضمن إمكانية استدعاء الدالة print()، والتي تم وضع علامة عليها أيضًا على أنها const، عليه. يسمح هذا للدالة print() بالوصول إلى حالة كائن الظهيرة دون خوف من التعديل.
باختصار، تضمن الدالة الثابتة (print() const) عدم تعديل حالة الكائن، ويضمن الكائن الثابت (const time noon(12, 0, 0)) بقاء حالته دون تغيير طوال حياته. تعمل هذه المفاهيم معًا لفرض الثبات والسلامة في الكود.