Virtual Functions

  • + 0 comments

    Staight Forward Code using good OOP Design

    #include<string.h>    
    
    class Person{
        protected:
            int age;
            string name;
        
        public:
            virtual void getdata(){
                cin >> name >> age;
            }
            virtual void putdata(){
                cout<<name<<" "
                    <<age<<" ";
            }
    };
    class Student:public Person{
        private:
            static int cnt;
            int marks[6];
            int cur_id;
        
        public :
            Student():Person(){
                cnt++;
                cur_id = getCount();
            }
            static int getCount(){
                return cnt;
            }
            
            virtual void getdata(){
                Person::getdata();
                for (int i=0; i<6; i++) 
                    cin >> marks[i];
            }
            virtual void putdata(){
                int total_marks = 0;
                
                Person::putdata();
                
                for (int i = 0; i<6; i++)
                    total_marks+=marks[i];     
                
                cout<<total_marks<<" "<<cur_id<<endl;
            }
            
    };
    class Professor:public Person{
        private:
            static int cnt;
            int cur_id;
            int publications;
            
        public:
            Professor():Person(){
                cnt++;
                cur_id = getCount();
            }
            virtual void getdata(){
                Person::getdata();
                cin >> publications;
            }
            virtual void putdata(){
                Person::putdata();
                cout<<publications<<" "<<cur_id<<endl;
            }
            static int getCount(){
                return cnt;
            }
    };
    
    int Student::cnt = 0;
    int Professor::cnt = 0;