Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мищишин електронка.doc
Скачиваний:
1
Добавлен:
08.12.2018
Размер:
1.04 Mб
Скачать

Void show_manager(void);

private:

float annual_bonus;

char company_car[64];

Int stock_options;

};

Коли ви породжуєте клас з базового класу, приватні елементи базового класу доступні похідному класу тільки через інтерфейсні функції базового класу. Таким чином, похідний клас не може напряму звернутися до приватних елементів базового класу, використовуючи оператор крапку.

Наступна програма MGR_EMP.CPP ілюструватиметься використовування спадкоємства в C++, створюючи клас manager з базового класу employee:

class employee {

public:

employee(char *, char *, float);

void show_employee(void);

private:

char name[64];

char position[64];

float salary;

};

employee :: employee(char *name, char *position, float salary)

{

strcpy(employee :: name, name);

strcpy(employee :: position, position);

employee :: salary = salary;

}

void employee :: show_employee(void)

{

cout << "Ім'я: " << name << endl;

cout << "Посада: " << position << endl;

cout << "Ставка: $" << salary << endl;

}

class manager : public employee {

public:

manager(char *, char *, char *, float, float, int);

void show_manager(void);

private:

float annual_bonus;

char compony_car[64];

int stock_options;

};

manager :: manager(char *name, char *position, char *company_car,

float salary, float bonus, int stock_options) :

employee(name, position, salary)

{

strcpy(manager :: company_car, company_car);

manager :: annual_bonus = bonus;

manager :: stock_options = stock_options;

}

void manager :: show_manager(void)

{

show_employee();

cout << "Автомобіль фірми: " << company_car << endl;

cout << "Щорічна премія: $" << annual_bonus << endl;

cout << "Фондовий опціон: " << stock_options << endl;

}

Void main(void)

{

employee worker("Джон Дой", "Програміст", 35000);

manager boss("Джейн Дой", "Віце-президент ", "Lexus",

50000.0, 5000, 1000);

worker.show_employee( );

boss.show_manager( );

}

Як бачите, програма визначає базовий клас employee, а потім визначає похідний клас manager. Зверніть увагу на конструктор manager. Коли ви породжуєте клас з базового класу, конструктор похідного класу повинен викликати конструктор базового класу. Щоб викликати конструктор базового класу, помістіть двокрапку зразу ж після конструктора похідного класу, а потім вкажіть ім'я конструктора базового класу з необхідними параметрами:

manager :: manager(char *name, char *position, char *company_car,

float salary, float bonus, int stock_options) :

employee(name, position, salary) // Конструктор базового класу

{

strcpy(manager :: company_car, company_car);

manager :: annual_bonus = bonus;

manager :: stock_options = stock_options;

}

Також зверніть увагу, що функція show_manager викликає функцію show_employee, яка є елементом класу employee. Оскільки клас manager є похідним класу employee, клас manager може звертатися до загальних елементів класу employee, так ніби всі ці елементи були визначені усередині класу manager.