استخدام وتهيئة أعضاء البيانات الثابتة
نحن نعرف بالفعل مفهوم الثابت عندما نتعلم لغة C. الكلمة الأساسية هي const ، ولا يمكن تغيير ما يسمى بـ "constant". لا يمكن تغيير هذه القيمة.
حسنًا، في لغة C++، يوجد أيضًا مفهوم الثابت. والفرق الإضافي هو أنه بالإضافة إلى تعديل المتغيرات العامة إلى متغيرات ثابتة، يمكن أيضًا استخدام const لتعديل كائن وتحويله إلى كائن ثابت. ويطلق على أعضاء البيانات ووظائف الأعضاء التي يمكنها تعديل الفصل اسم أعضاء البيانات الثابتة ووظائف الأعضاء الثابتة للفئة على التوالي.
بعد ذلك، سنشرح أعضاء البيانات الثابتة ، ووظائف الأعضاء الثابتة ، والكائنات الثابتة بالتسلسل.
1. أعضاء البيانات الثابتة:
استخدام أعضاء البيانات الثابتة هو نفس استخدامنا في لغة C، باستثناء أن هذا الجزء من البيانات يظهر في الفصل، والتنسيق المستخدم هو كما يلي:
نوع البيانات اسم عضو البيانات الثابتة؛
أو
اسم عضو بيانات نوع البيانات const؛
يجب تهيئة الأعضاء الذين تم تعديلهم بواسطة const ولا يمكن تغييرهم، ويتم تنفيذ طريقة التهيئة في قائمة التهيئة الخاصة بمنشئ الفئة.
بالإضافة إلى ذلك، هناك حالة خاصة، إذا كان العضو من النوع الثابت، أي عضو بيانات ثابت ثابت ، لأنه سمة ثابتة، فيجب تهيئة التهيئة خارج الفصل. دعونا نضع الموقف المذكور للتو في الكود لتوضيح:
#include<iostream>usingnamespacestd;classClock{private:constinth;// تعديل h كعضو من النوع الثابت constintm;// تعديل m كعضو من النوع الثابت intconsts;// يمكن استخدام كلا الاستخدامين أعلاه staticconstintx;public:Clock (inta, intb,intc):h(a),m(b),s(c){cout<<Constrctor!Called<<endl;}intShowTime(){cout<<h<<:<<m<< :<< s<<endl;return0;}intGetX(){cout<<x<<endl;return0;}};constintClock::x=99;intmain(){ClockA(12,10,30);A. ShowTime() ;A.GetX();return0;}
تشغيل نتائج العرض التوضيحي:
يرجى الانتباه إلى أعضاء البيانات الثابتة الأربعة في الفصل، ومن بينهم X هو نوع ثابت، نظرًا لخصائصه الثابتة الخاصة، يجب تهيئته خارج الفصل، حتى لو كان X نوعًا خاصًا!
2. الأشياء الثابتة:
في C++، يمكن تعريف الكائن كنوع ثابت، أي كائن ثابت. بعد هذا الإعلان، لا يمكن تغيير الكائن خلال دورة الحياة بأكملها، لذلك يجب تهيئته بواسطة المُنشئ عند تعريفه. تنسيق التعريف هو كما يلي:
اكتب اسم كائن ثابت؛
أو
اسم كائن نوع ثابت؛
تجدر الإشارة إلى أن الكائنات الثابتة لا يمكنها الوصول إلى وظائف غير الأعضاء في الفصل، ولكن يمكنها فقط الوصول إلى وظائف الأعضاء الثابتة (الجزء 3 أدناه). دعونا نلقي نظرة على المثال أدناه:
#include<iostream>usingnamespacestd;classClock{private:constinth;// تعديل h ليكون عضوًا من النوع الثابت constintm;// تعديل m ليكون عضوًا من النوع الثابت intconsts;// كلا الاستخدامين أعلاه ممكنان intx;public: الساعة (inta, intb,intc):h(a),m(b),s(c){x=99;cout<<Constrctor!Called<<endl;}intShowTime(){cout<<h<<: <<m< <:<<s<<endl;return0;}intGetX()const{//x=99;cout<<x<<endl;return0;}};intmain(){constClockA(12,10, 30);constClockB (14,20,50);//A=B;//A.ShowTime();A.GetX();return0;}
انتبه إلى العبارات الموجودة في السطرين 39 و40 في التعليمات البرمجية. سيُبلغ التحويل البرمجي العادي عن خطأ لأن A كائن ثابت ولا يمكن تعيين قيمة له، كما أن وظيفة ShowTime هي وظيفة غير عضو. يمكن تنفيذ 41 سطرًا من التعليمات البرمجية، ويكون التأثير كما يلي:
3. وظائف العضو الثابت:
وبالمثل، بعد تعديل دالة العضو في الفصل بواسطة const، تصبح دالة عضو ثابتة كما يلي:
اسم وظيفة نوع الإرجاع (عمود قائمة المعلمات) const؛
بحاجة إلى الاهتمام بما يلي:
(1) يجب أن يحتوي تعريف وإعلان وظائف العضو الثابت على const؛
(2) يمكن لوظائف الأعضاء الثابتة فقط استدعاء وظائف الأعضاء الثابتة، ولكن لا يمكنها استدعاء وظائف الأعضاء غير العادية، ولا يمكنها الوصول إلى متغيرات الأعضاء غير العادية ولكن لا يمكنها تغييرها.
على سبيل المثال الكود التالي:
#include<iostream>usingnamespacestd;classClock{private:constinth;// تعديل h ليكون عضوًا من النوع الثابت constintm;// تعديل m ليكون عضوًا من النوع الثابت intconsts;// كلا الاستخدامين أعلاه ممكنان intx;public: الساعة (inta, intb,intc):h(a),m(b),s(c){x=99;cout<<Constrctor!Called<<endl;}intShowTime(){cout<<h<<: <<m< <:<<s<<endl;return0;}intGetX()const{//x=99;cout<<x<<endl;return0;}};intmain(){constClockA(12,10, 30);أ .GetX();return0;}
انتبه إلى السطرين 29 و30 من التعليمات البرمجية، إذا كنت تستخدم السطر 29 من التعليمات البرمجية، فسيتم الإبلاغ عن خطأ في الترجمة، ويكون تأثير التشغيل الفعلي كما يلي:
إن إنشاء مفهوم الثوابت في لغة C++ يوضح الحدود بين التغيير والثبات لكل كائن في البرنامج، ويعزز أيضًا أمان برامج C++ وإمكانية التحكم فيها.
يرجى تجربتها بنفسك.