البادئات في ++C
البادئات
أتاح البرنامج السابق طريقتين لتخصيص قيم لبيانات الكائن ؛ الأولي عن طريق البرنامج (الدالة setdist() ) والثانية عن طريق المستخدم ( الدالة getdist() ) . ولكن حبذا لو وجدنا طريقة لاستهلاك الكائن , أي إعطاؤه القيم وقت التعريف به , كما تستهل المتغيرات , مثلا بأمر كالتالي :
Distance dist (4, 2.5); // استهلاك كائن
نلجأ لهذه المهمة إلي نوع خاص من الدوال المنتمية , يعمل تلقائيا عند إنشاء الكائن , ومن ثم تسمي دوال الابتداء , أو البادئات constructors , فالدالة البادئة (سوف نطلق عليها اختصارا : البادئة ) هي دالة منتمية للكائن , تنفذ تلقائيا عرضا معينا بمجرد أن يظهر الكائن للوجود .
والواقع أن دوال البدء موجودة في اللغات البرمجية , تعمل تلقائيا بمجرد تعريف المتغيرات , فعند تعريف متغير بأنه من النوع int مثلا , تعمل دالة معينة تلقائيا علي حجز 2 بايت من الذاكرة له . وبإعطائك إمكانية استغلال البادئات تكون قد منحت إحدي الإمكانيات التي لواضعي محولات الصياغة للغات البرمجية . فليكن ذلك خطوة علي طريق مستقبلك المهني في البرمجة .
مثال لعداد
المثال التالي يبين فكرة البادئات , كما يقدم كائنا يصلح للأغراض الشائعة في البرمجة , وهو عبارة عن عداد counter يتزايد مع تكرار حادثة معينة .
فإذا كان العداد مطلوبا لأكثر من دالة في البرنامج , فإنه في البرمجة التقليدية يكون متغيرا خارجيا . ولكن مر بك محاذير استخدام المتغيرات الخارجية في الفصل الأول , وعلي ذلك فالأفضل أن يكون علي هيئة كائن .
كما أنه من المناسب أن يبدأ العداد كلما إستدعي بالقيم الصفرية , وهو ما سنقوم به بادئة منتمية للكائن counter . وإليك البرنامج المنشود .
counter.cpp
// counter.cpp
// object represents a counter variable
#include <iostream.h>
#include <conio.h>
class Counter
{
private:
unsigned int count; // count
public:
Counter() { count = 0; } // constructor
void inc_count() { count++; } // increment count
int get_count() { return count; } // return count
};
void main()
{
Counter c1, c2; // define and initialize
cout << "\nc1=" << c1.get_count(); // display
cout << "\nc2=" << c2.get_count();
c1.inc_count(); // increment c1
c2.inc_count(); // increment c2
c2.inc_count(); // increment c2
cout << "\nc1=" << c1.get_count(); // display again
cout << "\nc2=" << c2.get_count();
getche();
}
البادئة counter
تلاحظ في تعريف فئة الكائن counter وجود دالة لها نفس اسمه , عرفت علي الشكل التالي :
Counter() { count = 0 }; // 0 بادئة لاستهلاك المتغير بالقسمة
وهي صيغة البادئات . ولما كان محول الصياغة لا يعبأ بالفواصل , فإن هذه الصيغة تقابل :
Counter
{
Count = 0;
}
وهذه الدالة هي المسئولة عن إعطاء قيم كل من الكائنتين c1, c2 القيم الصفرية عند بدء تشغيل أي منهما .
ويمكن إعطاء البادئات أية مهمة تنفذ بمجرد إنشاء الكائن , فيمكنك مثلا إظهار رسالة ما كأن تكون صيغة البادئ :
Count() { count=0; cout
فتقوم البادئة بمهمتين , إعطاء القيمة الصفرية وإظهار الرسالة المبينة .
المنهيات
بما أنه توجد دوال تعمل تلقائيا عند بدء إنشاء الكائن , فلعلك توقعت وجود دوال تعمل تلقائيا أيضا عند إنهاء وجوده , وهذا هو الواقع فعلا , وتسمي هذه الدوال " المنهيات distructors وتعريف المنهية يكون مثل البادئة , ولكنه يميز بعلامة "~" قبل إسمها , علي الصورة التالية :
Class Foo
{
Privat:
In data
Public:
Foot() {data = 0}; //constructor
~Foo() { }; // destructor
};
ولن نحتاج عمليا لاستخدام المنهيات إلا في مقالات قادمة عند الحديث عن تخصيص أماكن من الذاكرة .
تعليقات
إرسال تعليق