التوارث العام والخاص في ++C

التوارث العام والخاص

لاحظت أن الإعلان عن الفئة المشتقة يتضمن الكلمة الحاكمة public كما في :

Class manager : public employee

فما دورها ؟

إن هذه الكلمة تحدد أن الفئة المنتمية للفئة المشتقة تستطيع أن تتعامل مع الدوال المنتمية الأساسية , ولو كانت الفئة المشتقة معرفة private لما أمكن ذلك أنظر الشكل .

Object-Oriented Programming in C   _Page_0424_Image_0001

شكل الاشتقاق العام والخاص

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

مستويات التوارث

يمكن إشتقاق فئة مشتقة ففي المثال التالي سوف نشتق من فئة العمال فئة ملاحظين forman نضيف إلي بيانات بيانا بالكمية المنتجة تحت إشرافه (quota) انظر الشكل .

c  3

شكل مستويات التوارث

employ2.cpp


 


// employ2.cpp


// multiple levels of inheritance


// UCS Laboratories


#include <iostream.h>


#include <conio.h>


 


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


 


class employee


   {


   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


   {


   };


 


class foreman : public laborer         // foreman class


   {


   private:


      float quotas;    // percent of quotas met successfully


   public:


      void getdata()


     {


     laborer::getdata();


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


     }


      void putdata()


     {


     laborer::putdata();


     cout << "\n   Quotas: " << quotas;


     }


   };


 


void main()


   {


   laborer l1;


   foreman f1;


 


   cout << endl;


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


   l1.getdata();


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


   f1.getdata();


 


   cout << endl;


   cout << "\nData on laborer 1";


   l1.putdata();


   cout << "\nData on foreman 1";


   f1.putdata();                         


   getche();


   }




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

التسميات: