Глава 20. Наследование и полиморфизм________________________543
то мы можем, конечно, создать экземпляр класса Employee и вызвать printData, чтобы вывести номер социального страхования служащего (что уже само по себе пример полиморфизма: операция « выводит наше длинное целое иным образом, нежели строку символов или число с плавающей точкой):
Employee firstEmployee;
firstEmployee. SetSocialSecurityNurnber (394772386) ;
firstEmployee. PrintData () ;
С другой стороны, мы можем также определить функцию printData для класса salariedEmployee, как показано в листинге 20.1.
^include <iostream.h>
class SalariedEmployee : public Employee
{
public:
SalariedEmployee() ;
virtual "SalariedEmployee() ;
void SetLowerSalaryRange(float);
float GetLowerSalaryRange() ;
void SetUpperSalaryRange(float) ;
float GetUpperSalaryRange();
void PrintData() ;
private:
float lowerSalaryRange;
float upperSalaryRange;
};
void SalariedEmployee::PrintData() {
cout « "Нижняя ставка = " « lowerSalaryRange
« ", верхняя ставка = " « upperSalaryRange « endl;
};
Затем мы можем сделать то же самое для всех оставшихся классов: Engineer, Manager и т. д. Предположим, что printData определена для всех наших классов и что существует глобальный массив служащих под названием conpanyEmployee и глобальная переменная numberof Employees; что тогда будет результатом выполнения следующего фрагмента?
extern Employee *companyEmployee[] ;
extern int numberOfEmployees;