Polymorphism

أنشِئ Class :

اسمه: novel

المتغيرات : ntype, nprice

يحوي : دالة تقوم بعمل return لسعر الرواية وهو 30 بشكل عام ، ودالة تقوم بعمل return لنوع الرواية وهو general ودالة لطباعة المعلومات .

هذا الـ Class  هو Base Class  ، والتالية هي  Derived Classes  : “مفهوم الوراثة

الـ  Classes التالية لديها مثل متغيرات الـ Class الأب ، ولكن تعريفات(وليست أسماء) أخرى للدوال عن تلك الموجودة في الـ class الأب !

الـ Class الأول  :

اسمه: Agatha

يحوي : يختلف بأن سعر الرواية هو 15 ونوعها mystery .

الـ Class الثاني:

اسمه: McGraw

 يحوي : تختلف فقط في سعر الرواية هو 20 أما النوع لايختلف عن النوع العام general .

الـ Class الثالث:

اسمه: Signed

 يحوي : تختلف فقط في نوع الرواية هو signed أما السعر لايختلف عن السعر العام 30.

أكتب هذه الـ Classes بحيث في main عندما تُنشِئ pointer من نوع novel  وتجعله يشير لأنواع مختلفة من الـ objects يعرض معلومات صحيحة لكل نوع ، بمعنى عندما تجعله يشير للـ object من نوع Signed وتقوم بتعبئة معلوماته عن طريق الدوال ثم تطبع المعلومات نجد أن النوع ليس general وإنما signed.  “مفهوم الـ polymorphism”

الحل:

#include <iostream>
#include <string>
using namespace std;

class novel
{
public:
 double nprice;
 string ntype;

 virtual double price(){ return 30; }
 virtual string type(){ return "general"; }

 void display()
 {
 cout << "Novel price= " << nprice << endl;
 cout << "Novel type= " << ntype << endl;
 }
};
//-----------------------------------------------------//
class Agatha :public novel
{
public:
 double price(){ return 15; }
 string type(){ return "mystery"; }
};
//----------------------------------------------------//
class McGraw :public novel
{
public:
 double price(){ return 20; }
};
//----------------------------------------------------//
class Signed :public novel
{
public: string type(){ return "signed"; }
};
//----------------------------------------------------//
void main()
{
 Agatha a;
 McGraw m;
 Signed s;
 novel *n;

 n = &a;
 //fill info
 n->nprice = n->price();
 n->ntype = n->type();
 //print
 n->display();

 n = &m;
 n->nprice = n->price();
 n->ntype = n->type();
 n->display();

 n = &s;
 n->nprice = n->price();
 n->ntype = n->type();
 n->display();

 system("pause");
}

السطر 11 و 12 : كلمة virtual هي التي تسمح لي بإعطاء تعريفات اخرى للدوال في الـ classes الأخرى