التوارث العام والخاص في ++C
التوارث العام والخاص
لاحظت أن الإعلان عن الفئة المشتقة يتضمن الكلمة الحاكمة public كما في :
Class manager : public employee
فما دورها ؟
إن هذه الكلمة تحدد أن الفئة المنتمية للفئة المشتقة تستطيع أن تتعامل مع الدوال المنتمية الأساسية , ولو كانت الفئة المشتقة معرفة private لما أمكن ذلك أنظر الشكل .
شكل الاشتقاق العام والخاص
والغالب من التطبيقات تتطلب أن تعلن الفئة المشتقة عامة , حتي يمكنها التعامل مع دوال الفئة الأساسية وتستفيد من إمكانياتها ولكن قد لا تقتضي ظروف أن يود المبرمج إخفاء الفئة الأساسية تماما . تخيل إنك قد صممت فئة لمصفوفة ورضيت عنها تماما وإنك أردت استخدامها لاشتقاق فئة لمكدس , وأنك تريد ألا تعامل كائنات المكدس كمصفوفات , أي عن طريق المؤثر [] , بل دائما من خلال الدالتين push(),pop() عندئذ تخفي الفئة الأساسية عن الفئة المشتقة , بأن تعلن الأخيرة خاصة .
مستويات التوارث
يمكن إشتقاق فئة مشتقة ففي المثال التالي سوف نشتق من فئة العمال فئة ملاحظين forman نضيف إلي بيانات بيانا بالكمية المنتجة تحت إشرافه (quota) انظر الشكل .
شكل مستويات التوارث
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();
}
ونلفت انتباهك هنا إلي مستويات التوارث لا تعبر عن التسلسل الرئاسي ففئة ملاحظ هنا اشتقت من فئة عامل حيث إنها الأعم بالنسبة لها .
تعليقات
إرسال تعليق