Наследование.

Цель объектно-ориентированного программирования состоит в повторном использовании созданных классов. Если уже создан некоторый класс, то возможны ситуации, что новому классу нужны многие особенности уже существующего класса, и необходимо добавить один или несколько элементов данных или функций. C++ позволяет строить новый объект, используя характеристики уже существующего объекта. Новый объект будет наследовать элементы существующего класса (называемого базовым классом). Когда строится новый класс из существующего, этот новый класс называется производным классом.
В дополнение к общим (public) (доступным всем) и частным (private) (доступным методам класса) элементам C++ предоставляет защищенные (protected) элементы, которые доступны базовому и производному классам.
Наследование представляет собой способность производного класса наследовать характеристики существующего базового класса. Предположим, что есть базовый класс employee:

class employee
{
public:
employee(char *, char *, float);
void show_employee(void);
private:
char name[64];
char position[64];
float salary;
};

highlightSyntax('cpp_39105','cpp'); Предположим, что программе требуется класс manager, который добавляет следующие элементы данных в класс employee:
float annual_bonus;
char company_car[64];
int stock_options;


Программа может выбрать два варианта:

- создать новый класс manager, который дублирует многие элементы класса employee,

- породить класс типа manager из базового класса employee.

Порождая класс manager из существующего класса employee, снижается объем требуемого программирования и исключается дублирование кода

внутри программы.

Для определения этого класса необходимо указать ключевое слово class, имя manager, следующее за ним двоеточие и имя employee:
class manager:public employee

{

определяются элементы
};
Ключевое слово public, которое предваряет имя класса employee, указывает, что общие (public) элементы класса employee также являются общими и в классе manager. Следующие операторы порождают класс manager.
class manager : public employee
{
public:
manager(char *, char *, char *, float, float, int);
void show_manager(void);
private:
float annual_bonus;
char company_car[64];
int stock_options;
};

Когда порождается класс из базового класса, частные элементы базового класса доступны производному классу только через интерфейсные функции базового класса. Таким образом, производный класс не может напрямую обратиться к частным элементам базового класса, используя оператор точку.
Следующая программа использует наследования в C++ , создавая класс manager из базового класса employee:

Primer 1 Лекция 13.

#include <iostream>

#include <string.h>

using namespace std;