Глава 20. Наследование и полиморфизм________________________543

то мы можем, конечно, создать экземпляр класса Employee и вызвать printData, чтобы вывести номер социального страхования служащего (что уже само по себе пример полиморфизма: операция « выводит наше длинное целое иным образом, нежели строку символов или число с плавающей точкой):

Employee firstEmployee;

firstEmployee. SetSocialSecurityNurnber (394772386) ;

firstEmployee. PrintData () ;

С другой стороны, мы можем также определить функцию printData для класса salariedEmployee, как показано в листинге 20.1.

h05431.jpg

^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;