تدرج التوارث في ++C

تدرج التوارث

كانت الأمثلة المعطاة إلي التوارث في تطوير برامج موجودة وفي المثال الأتي نستخدمها كأساس لتصميم البرنامج المراد وضعه . فهو يمثل قاعدة بيانات أولية لتجميع بيانات عن الموظفين , وجعلناهم في ثلاثة مجموعات فقط , المدراء والباحثون , والعمال . وفي حين تجمع قاعدة البيانات اسم الموظف ورقمه الكودي تجمع للمدراء الوظيفة ومجموع نقاطه في نادي الجولف ] هل يحتفظ بهذها الرقم في بيانات الموظفين في أمريكا ؟ اختيار عجيب من المؤلف , كان من الممكن التفكير في خصيصة أكثر واقعية [ وبالنسبة للباحثين يحتفظ بعدد الأبحاث التي نشرت لهم .

وسوف ننشئ في برنامجا فئة عامة , تتضمن دوال للتعامل مع بيانات الاسم ورقم الموظف ثم نشتق منها ثلاث فئات مدير وباحث وعامل وتحتوي الفئتان الأوليتان البيانات الإضافية والدوال التي تتعامل معها أنظر الشكل .

c  2

شكل تدرج التوارث

employ.cpp


 


// employ.cpp


// models employee database using inheritance


// UCS Laboratories


#include <iostream.h>


#include <conio.h>


 


const int LEN = 80;           // maximum length of names


 


class employee                // employee class


   {


   private:


      char name[LEN];         // employee name


      unsigned long number;   // employee number


   public:


      void getdata()


     {


     cout << "\n   Enter last name: "; cin >> name;


     cout << "   Enter number: ";      cin >> number;


     }


      void putdata()


     {


     cout << "\n   Name: " << name;


     cout << "\n   Number: " << number;


     }


   };


 


class manager : public employee     // management class


   {


   private:


      char title[LEN];  // "vice-president" etc.


      double dues;      // golf club dues


   public:


      void getdata()


     {


         employee::getdata();


     cout << "   Enter title: ";          cin >> title;


     cout << "   Enter golf club dues: "; cin >> dues;


     }


      void putdata()


     {


     employee::putdata();


     cout << "\n   Title: " << title;


     cout << "\n   Golf club dues: " << dues;


     }


   };


class scientist : public employee      // scientist class


   {


   private:


      int pubs;     // number of publications


   public:


      void getdata()


     {


     employee::getdata();


     cout << "   Enter number of pubs: "; cin >> pubs;


     }


      void putdata()


     {


     employee::putdata();


     cout << "\n   Number of publications: " << pubs;


     }


   };


 


class laborer : public employee        // laborer class


   {


   };


 


void main()


   {


   manager m1, m2;


   scientist s1;


   laborer l1;


 


   cout << endl;


   cout << "\nEnter data for manager 1";    // get data for


   m1.getdata();                            // several employees


 


   cout << "\nEnter data for manager 2";


   m2.getdata();


 


   cout << "\nEnter data for scientist 1";


   s1.getdata();


 


   cout << "\nEnter data for laborer 1";


   l1.getdata();


 


   cout << "\nData on manager 1";           // display data for


   m1.putdata();                            // several employees


 


   cout << "\nData on manager 2";


   m2.putdata();


 


   cout << "\nData on scientist 1";


   s1.putdata();


 


   cout << "\nData on laborer 1";


   l1.putdata();


   getche();


   }




تلاحظ أننا لم نعرف أي كائن منتم للفئة العامة employee فالغرض منها هو أن يشتق منها الفئات الأخري هذه الدوال توصف بأنها abstract ] الترجمة الحرفية مجردة [ علي أن اصطلاح abstract له معني أدق سوف نعرض له في حديثنا عن الدوال الاعتبارية virtual functions في مقالات قادمة .



الملاحظة الأخري أن الفئة labour لم تتضمن أية دوال إضافية وهو ما يوحي بأنها لم تكن ضرورية والواقع أنها توضع فقط لتوضيح أنها فئة علي نفس درجة الفئات الأخري . ومن جهة أخري فقد يحدث تعديل في البرنامج يضيف إليها دوال معينة فلا نضطر للتعديل في الفئة العامة .

تعليقات

المشاركات الشائعة من هذه المدونة

المؤثرات الحسابية في C++

الرسم Graphics

دوال النمط الرسومي في ++C