اذهب إلى المحتوى

السؤال

نشر

1)Write a C++ program and create an instance of the Base and Derived class. Call all the 
methods of the two classes (3 methods for the first class and 4 methods for the second 
class) and print the returned values. 
Create a pointer of the Base class and initialize it with an address of an instance of the 
Derived class and use that pointer to call and print the returned value of the get_info()
method of the Derived class.
2) How to make the get_info() method a pure virtual.   

Recommended Posts

  • 1
نشر

مرحبا 
هذا السؤال تكملة للسؤال السابق فالحل سيعتمد على البرنامج السابق
يمكن عمل البرنامج بهذا الشكل

// 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) + ".";
}

يمكنك تصفح أكواد التطبيق و تجربته أونلاين من هنا

  • 1
نشر

مرحبا 

البرنامج يشمل كيفية جعل الدالة virtual pure و ذلك بإضافة الكلمة virtual في تعريف الدالة في الكلاس الأب 

فإن كنت تريد جعل الدالة عادية فقط ستحذف الكلمة virtual من تعريف الدالة و في هذه الحالة سيتم إستعمال الدالة الموجودة في الكلاس الأب أما في حالة عندما تكون الدالة virtual يتم إستعمال الدالة الموجودة في الكلاس الإبن أي Derived 

  • 0
نشر

مرحبا 
هذا كود البرنامج بدون إستعمال virtual pure 

// 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
    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;
}

ويمكنك تجربة الأكواد من هنا
و هذا كود البرنامج بإستعمال virtual pure 
 

// 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;
}

و يمكنك تجربة الأكواد من هنا 
نفس الكود فقط في تعريف الدالة get_info هناك فرق
بالتوفيق

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...