Virtual Functions

Sort by

recency

|

449 Discussions

|

  • + 0 comments
    // class Person --> Main class 
    class Person {
        public :
        int age;
        string name;
        virtual void getdata()=0;   // actually pure virtual functions 
        virtual void putdata() =0;  
    };
    // class Professor
    class Professor: public Person{
        public :
        int publications;
       static int cur_id;   // 
       int temp_id;    // for storing cur_id and assigning it then ++ 
        //constructor to ++ the cur id
        Professor(){temp_id=++cur_id; }
        void getdata();
        void putdata();
    };
    int Professor::cur_id=0;
    
    // basically check the input and output and try to understan what's going on , then you can understand that " 1/2 is for either professor/student , but in o/p cur_id will also 1/2 is for because we have to initialize a static var. for each class starting from 0 ,  and will be ++ as per input -----> for all this we have to use a constructor which will automatically ++ that , if that class object is created . "
    
    void Professor::getdata(){
        cin>>name>>age>>publications;
    }
    
    // 
    void Professor::putdata(){
        cout<<name<<" "<<age<<" "<<publications<<" "<<temp_id<<endl;
    }
    
    // NOW STUDENT CLASS
    class Student: public Person{
        public :
        int marks[6];
        static int cur_id;
        int temp_id;
        // same explanation check upper 
        Student(){
            temp_id=++cur_id;
        }
        
        void getdata();
        void putdata(); 
    };
    
    int Student::cur_id=0;
    // 
    void Student::getdata(){
        //cout<<"taking";
        cin>>name>>age;
        for(int i=0;i<6;i++){
            cin>>marks[i];
        } 
    }
    
    // 
    void Student :: putdata(){
         int total_sum=0;
         for(int i=0;i<6;i++){
            total_sum=total_sum+marks[i];
         }
         cout<<name<<" "<<age<<" "<<total_sum<<" "<<temp_id<<endl;
        
    }
    
  • + 0 comments

    class Person { public: virtual void getdata() = 0; virtual void putdata() = 0;

    protected:
    string name{};
    int age{};
    

    };

    class Professor : public Person {

    private: int publications{}; static int prof_seq_id; int prof_cur_id{};

    public: Professor() :prof_cur_id {prof_seq_id} { prof_seq_id++; }

    void getdata() override { cin >> name; cin >> age; cin >> publications; }

    void putdata() override { cout << name << " " << age << " " << publications << " " << prof_cur_id << endl; }

    };

    int Professor::prof_seq_id = 1;

    class Student : public Person {

    private: vector marks; int stud_cur_id {}; int sum; static int stud_seq_id;

    public:
    Student()
    :stud_cur_id{stud_seq_id}
    {
       stud_seq_id++;
    }
    
    void getdata() override
    {
       cin >> name;
       cin >> age;
    
       int num;
       for(int i = 0; i < 6; i++)
       {
        cin >> num;
        marks.emplace_back(num);
       }   
    }
    
    void putdata() override
    {
        sum = accumulate(marks.begin(), marks.end(), 0);
        cout << name << " " << age << " " << sum << " " << stud_cur_id << endl;
    }
    

    };

    int Student::stud_seq_id = 1;

  • + 0 comments
    //used static variables to track professors and studentents seprately
    static int count_professor = 0 , count_student = 0;
    
    class Person{
        protected:
            string name;
            int age , cur_id;
        public:
            virtual void getdata() = 0;
            virtual void putdata() = 0;
    };
    
    class Professor : public Person{
        private:
            int publications;
        public:
            void getdata(){
                cin>>name;
                cin>>age;
                cin>>publications;
                cur_id = ++(::count_professor);
            }
            void putdata(){
                cout<<name<<" "<<age<<" "<<publications<<" "<<cur_id<<endl;
            }
    };
    class Student : public Person{
        private:
            int marks;
        public:
            void getdata(){
                cin>>name;
                cin>>age;
                int temp;
                marks = 0;
                for(int i = 0; i < 6;i++){   
                    cin>>temp;
                    marks += temp;
                }
                cur_id = ++(::count_student);
            }
            void putdata(){
                cout<<name<<" "<<age<<" "<<marks<<" "<<cur_id<<endl;
            }
    };
    
  • + 0 comments

    class Person {

    public: string name; int age;

    public:
    virtual void getdata() = 0;
    virtual void putdata() = 0;
    
    virtual ~Person() = default;
    

    };

    class Professor: public Person {

    int publication; static int cur_id;

    public:
    void getdata() override
    {
        cin >> name >> age >> publication;
    }
    void putdata() override
    {
        cout << name <<" "<< age << " "<< publication << " " << ++cur_id <<endl;
    }
    

    };

    class Student:public Person {

    int marks[6]; static int cur_id;

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

    };

    int Professor::cur_id = 0; int Student::cur_id = 0;

  • + 0 comments

    class Person { public: string name; int age;

    public:
    virtual void getdata() = 0;
    virtual void putdata() = 0;
    
    virtual ~Person() = default;
    

    };

    class Professor: public Person { int publication; static int cur_id;

    public:
    void getdata() override
    {
        cin >> name >> age >> publication;
    }
    void putdata() override
    {
        cout << name <<" "<< age << " "<< publication << " " << ++cur_id <<endl;
    }
    

    };

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

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

    };

    int Professor::cur_id = 0; int Student::cur_id = 0;