Virtual Functions

Sort by

recency

|

447 Discussions

|

  • + 0 comments

    It pushes you to think about polymorphism, inheritance, and how base class pointers interact with derived class objects. Playwin567

  • + 0 comments
    #include <cmath>
    #include <cstdio>
    #include <vector>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    class Person{
    protected:
        string name;
        int age;
    public:
        Person(){
            
        }
        virtual void getdata()=0;
        virtual void putdata()=0;
    };
    class Professor : public Person{
        int publications;
        static int cur_id;
    public:
        Professor(){
            
        }
        void getdata(){
            cin >> name >> age >>publications;
        }
        void putdata(){
            cout << name <<" "<< age <<" "<<publications<<" "<<++cur_id<<endl;
        }
    };
    int Professor::cur_id=0;
    class Student : public Person{
        int marks[6];
        int sum;
        static int cur_id;
        
    public:
        Student(){
            sum =0;
        }
        void getdata(){
            cin >> name >> age ;
            for(int i =0;i<6;i++){
                cin >> marks[i];
            }
        }
        void putdata(){
            for(int i =0 ;i<6;i++){
                sum += marks[i];
            }
            cout << name << " " << age << " "<<sum << " "<<++cur_id<<endl;
        }
    };
    int Student::cur_id=0;
    int main(){
    
        int n, val;
        cin>>n; //The number of objects that is going to be created.
        Person *per[n];
    
        for(int i = 0;i < n;i++){
    
            cin>>val;
            if(val == 1){
                // If val is 1 current object is of type Professor
                per[i] = new Professor;
    
            }
            else per[i] = new Student; // Else the current object is of type Student
    
            per[i]->getdata(); // Get the data from the user.
    
        }
    
        for(int i=0;i<n;i++)
            per[i]->putdata(); // Print the required output for each object.
    
        return 0;
    
    }
    
  • + 0 comments

    Is my approach or design following best practices? ` class Person{ string name; int age; public: virtual void getdata(){ cin>>name>>age;

    }
    virtual void putdata(){
        cout<<name<<" "<<age<<" ";
    }
    
    virtual ~Person(){}
    

    };

    class Professor: public Person{ int publications; static int cur_id; int id;

    public:
    Professor(){
        id = ++cur_id;
    }
    
    void getdata() override{   
        Person::getdata();     
        cin>>publications;
    
    }
    
    void putdata() override{
        // Need to output properly
        Person::putdata();
        cout<<publications<<" "<<id<<endl;        
    }
    

    }; int Professor::cur_id = 0;

    class Student: public Person{ int marks[6]; static int cur_id; int id;

    public:
    Student(){
        id = ++cur_id;       
    } 
    void getdata() override{
        Person::getdata();
        for(int i = 0;i<6;i++){
            cin>>marks[i];
        }
    }
    
    void putdata() override{
        Person::putdata();
        int totalSum = 0;
        for(int i = 0;i<6;i++){
            totalSum += marks[i];            
        }
        cout<<totalSum<<" "<<id<<endl;
    }
    

    }; int Student::cur_id = 0; `

  • + 0 comments
    #include <cmath>
    #include <cstdio>
    #include <vector>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    class Person
    {
    protected:
        int m_cur_id;
        string m_name;
        int m_age;
    
    public:
        virtual void getdata() = 0;
        virtual void putdata() = 0;
    };
    
    class Professor : public Person
    {
    private:
        int m_publications;
        static int id_tracker;
    
    public:
        Professor()
        {
            m_cur_id = ++id_tracker;
        }
        void getdata() override
        {
            cin >> m_name;
            cin >> m_age;
            cin >> m_publications;
        }
        void putdata() override
        {
            cout << m_name << " "
                 << m_age << " "
                 << m_publications << " "
                 << m_cur_id << endl;
        }
    };
    
    int Professor::id_tracker = 0;
    
    class Student : public Person
    {
    private:
        int m_marks[6];
        static int id_tracker;
    
    private:
        int sumOfMarks()
        {
            int sum = 0;
            for (int i = 0; i < 6; i++)
                sum += m_marks[i];
            return sum;
        }
    
    public:
        Student()
        {
            m_cur_id = ++id_tracker;
        }
        void getdata() override
        {
            cin >> m_name;
            cin >> m_age;
            for (int i = 0; i < 6; i++)
            {
                int mark;
                cin >> mark;
                m_marks[i] = mark;
            }
        }
        void putdata() override
        {
            cout << m_name << " "
                 << m_age << " "
                 << sumOfMarks() << " "
                 << m_cur_id << endl;
        }
    };
    
    int Student::id_tracker = 0;
    
    int main(){
    
        int n, val;
        cin>>n; //The number of objects that is going to be created.
        Person *per[n];
    
        for(int i = 0;i < n;i++){
    
            cin>>val;
            if(val == 1){
                // If val is 1 current object is of type Professor
                per[i] = new Professor;
    
            }
            else per[i] = new Student; // Else the current object is of type Student
    
            per[i]->getdata(); // Get the data from the user.
    
        }
    
        for(int i=0;i<n;i++)
            per[i]->putdata(); // Print the required output for each object.
    
        return 0;
    
    }
    
  • + 0 comments

    Here is Virtual Functions problem solution in C++ - https://programmingoneonone.com/hackerrank-virtual-functions-solution-in-cpp.html