مرحبا
هذا السؤال تكملة للسؤال السابق فالحل سيعتمد على البرنامج السابق
يمكن عمل البرنامج بهذا الشكل
// Example program
#include <iostream>
using namespace std;
class Base {
private:
const string name;
private:
const int age;
public:
Base(string name_val, int age_val) : name(name_val), age(age_val) {}
string get_name()
{
return this->name;
}
int get_age()
{
return this->age;
}
// نستعمل الكلمة virtual لجعل الدالة virtual pure
virtual string get_info()
{
return "The name is " + this->name + " and the age is " + std::to_string(this->age) + ".";
}
};
class Derived : public Base
{
private:
string type;
public:
Derived(string name, int age, string type) : Base(name, age)
{
this->type = type;
}
string get_type()
{
return this->type;
}
string get_info()
{
return "The name is: " + this->get_name() + ", the age is: " + std::to_string(this->get_age()) + " and the Type is: " + this->type;
}
};
int main()
{
// هنا قمنا بإنشاء instance من الكلاس Base
Base b1("Samir Abboud", 24);
// هنا قمنا بإنشاء instance من الكلاس Derived
Derived d1("Manar", 29, "manager");
// هنا سنقوم باستعمال دوال الكلاس Base
cout << "_____ Base Methods _____";
cout << "\nName: " << b1.get_name();
cout << "\nAge: " << b1.get_age();
cout << "\nBase Info: " << b1.get_info();
// هنا سنقوم باستعمال دوال الكلاس Derived
cout << "\n_____ Derived Methods _____";
cout << "\nName: " << d1.get_name();
cout << "\nAge: " << d1.get_age();
cout << "\nType: " << d1.get_type();
cout << "\nDerived Info: " << d1.get_info();
// هنا قمنا بإنشاء pointer من الكلاس Base وقمنا بإسناد object من الكلاس Derived
Base* b2 = new Derived("Mohamed", 33, "HR");
cout << "\n_____ Second Question _____";
cout << "\nInfo: " << b2->get_info();
return 0;
}
إذا كانت الدالة pure virtual سيتم إستعمال الدالة الموجودة في الكلاس الإبن أما إن كان العكس فسيستعمل الدالة الموجودة في الكلاس الأب
الكلاس Base يعتبر أب للكلاس Derived
لجعل الدالة pure virtual يتم استعمال الكلمة او ال keyword التالية : ( virtual ) و تضاف الى تعريف الدالة في الكلاس الأب
مثال على ذلك لاحظ شكل الدالة get_info في الكلاس Base :
// نستعمل الكلمة virtual لجعل الدالة virtual pure
virtual string get_info()
{
return "The name is " + this->name + " and the age is " + std::to_string(this->age) + ".";
}
يمكنك تصفح أكواد التطبيق و تجربته أونلاين من هنا