Приклад використання віртуальних функцій
Тепер, вже знаючи, що таке віртуальні функції, спробуємо їх використати. В програмі 20.18 попередньої теми ми створили клас person. Наступна програма 22.4 використовуватиме той сам клас person, а також два нові класи: student і professor. Обидва ці похідні класи містять метод isoutstanding(), який дає змогу відібрати студенів з середнім балом, вищим за заданий, а також викладачів (професорів), з кількістю публікацій, більшою за задану.
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<bios.h>
class person
{protected:
char name[40];
public:
void getname()
{cout<<"Input name:"; cin>>name;}
void putname()
{cout<<"Name:"<<name<<endl;}
virtual void getdata()=0;//Чиста віртуальна функція
virtual int isoutstanding()=0;//Чиста віртуальна функція
};
/////////////
class student:public person
{private:
float gps;
public:
void getdata()
{person::getname();
cout<<"Середній бал: ";cin>>gps;
}
int isoutstanding()
{return(gps>3.5)?1:0;}
};
/////////////
class professor: public person
{private:
int numpubs;
public:
void getdata()
{person::getname();
cout<<"Число публікацій:";cin>>numpubs;}
int isoutstanding()
{return(numpubs>100)?1:0;}
};
/////////////////
int main()
{clrscr();
person* persPtr[100];
char choice;
int n=0;
do{
cout<<"Студент(s) чи професор(p):»;
cin>>choice;
if(choice==’s’)
persPtr[n]=new student;
else
persPtr[n]=new professor;
persPtr[n++]->getdata();
cout<<”Continue y/n”;
cin>>choice;
} while (choice==’y’);
for(int j=0;j<n;j++)
{persPtr[j]->putname();
if(persPtr[j]->isoutstanding())
cout<<”Outrange\n”;
}
bioskey(0);
return 0;
}
Програма 22.4
Розберемо деякі особливості цієї програми.
Класи
Клас person – абстрактний, оскільки він містить чисті віртуальні функції.
virtual void getdata()=0;//Чиста віртуальна функція
virtual int isoutstanding()=0;//Чиста віртуальна функція
Ніякі об’єкти цього класу не можуть бути створені, він існує лише як базовий для класів student і professor. Ці породжені класи додають нові поля даних до базового класу: student – поле gps типу float, що містить середній бал студента; professor – поле numpubs цілого типу, що містить число публікацій педагога.
Функція isoutstanding()
Ця функція оголошена чистою віртуальною в класі person. В похідних класах вона оголошена як ціла і повертає значення 1 у випадку виконання заданої умови, та 0 – в іншому випадку.
Дата добавления: 2015-08-26; просмотров: 598;