بسبب الأهميّة الكبيرة للغة الـC++ وبسبب عدم وجود مقرّر يعتني عنايةً مباشرةً بهذه اللّغة، أظنّ أنّه يجب علينا رفع مستوانا فيها ! ووفقاً لهذا فأنا مستعدّ للإجابة عن كافّة تسائلاتكم حول هذه المادّة ! سأقوم بشرح فقرة مهمّة كلّما تسنّى لي الوقت لذلك !
اليوم سأبدأ بالـ Virtual نظراً لصعوبة هذه الفقرة ..... فلنعمل معاً على تسهيلها :)
أسس:
* "يجب" ذكر الكلمة المفتاحيّة: virtual في الصّف الأب، و"ليس من الضّروري" ذكرها في الابن !
المثالان التّاليان صحيحان:
- CODE: تحديد الكل
class Father
{
public:
virtual void Print()
{
cout<<"Father's function"<<endl;
}
};
class Son: public Father
{
public:
virtual void Print()
{
cout<<"Son's function"<<endl;
}
};
_____________________
- CODE: تحديد الكل
class Father
{
public:
virtual void Print()
{
cout<<"Father's function"<<endl;
}
};
class Son: public Father
{
public:
void Print()
{
cout<<"Son's function"<<endl;
}
};
أماّ المثال التّالي خاطئ (كلمة خاطئ هنا لا تعن عدم التّنفيذ بل تعني أنّنا لن نحقّق غايتنا من الـvirtual):
- CODE: تحديد الكل
class Father
{
public:
void Print()
{
cout<<"Father's function"<<endl;
}
};
class Son: public Father
{
public:
virtual void Print()
{
cout<<"Son's function"<<endl;
}
};
- CODE: تحديد الكل
int main()
{
Son S;
Father *Temp;
Temp=&S;
Temp->Print();
system("PAUSE"); return 0;
}
هناك الكثير من الأمثلة التي تشبه التّمارين التي أتتنا في الفحص النّظري، من لديه سؤال عن أي منها، فليسأل ! وأنا سأقوم بإدراج ما يصرأ على لذهني !
تمرين: اكتب خرج البرنامج التّالي:
- CODE: تحديد الكل
#include<iostream.h>
class GrandFather
{
public:
virtual void Print1()
{
cout<<"Grand Father's Function"<<endl;
}
virtual void Print2()
{
cout<<"Grand Father's Function"<<endl;
}
virtual void Print3()
{
cout<<"Grand Father's Function"<<endl;
}
void Print4()
{
cout<<"Grand Father's Function"<<endl;
}
void Print5()
{
cout<<"Grand Father's Function"<<endl;
}
void Print6()
{
cout<<"Grand Father's Function"<<endl;
}
void Print7()
{
cout<<"Grand Father's Function"<<endl;
}
};
class Father: public GrandFather
{
public:
virtual void Print1()
{
cout<<"Father1's Function"<<endl;
}
virtual void Print2()
{
cout<<"Father1's Function"<<endl;
}
void Print3()
{
cout<<"Father1's Function"<<endl;
}
virtual void Print4()
{
cout<<"Father1's Function"<<endl;
}
virtual void Print5()
{
cout<<"Father1's Function"<<endl;
}
void Print6()
{
cout<<"Father1's Function"<<endl;
}
void Print7()
{
cout<<"Father1's Function"<<endl;
}
};
class Son: public Father
{
public:
virtual void Print1()
{
cout<<"Son1's Function"<<endl;
}
void Print2()
{
cout<<"Son1's Function"<<endl;
}
virtual void Print3()
{
cout<<"Son1's Function"<<endl;
}
void Print4()
{
cout<<"Son1's Function"<<endl;
}
virtual void Print5()
{
cout<<"Son1's Function"<<endl;
}
void Print6()
{
cout<<"Son1's Function"<<endl;
}
virtual void Print7()
{
cout<<"Son1's Function"<<endl;
}
};
int main()
{
Son S;
GrandFather *Pointer=&S;
Pointer->Print1();
Pointer->Print2();
Pointer->Print3();
Pointer->Print4();
Pointer->Print5();
Pointer->Print6();
Pointer->Print7();
system("PAUSE"); return 0;
}
الجواب:
أول ثلاثة أسطر: "Son's Function"
آخر أربع أسطر: "Grand Father's Function"
بدنا حركة وهمّة .............................. :)