البادئات في ++C

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



};



ولن نحتاج عمليا لاستخدام المنهيات إلا في مقالات قادمة عند الحديث عن تخصيص أماكن من الذاكرة .

التسميات: