logo search
Производные классы в C++

1. Простое наследование

производный класс программный алгоритм

В C++ существуют специальные средства передачи всех определяемых пользователем свойств класса (как данных, так и функций-методов) другим классам, наследующим свойства данного.

Один класс может наследовать все составляющие другого класса. Класс, передающий свои компоненты другому, называют базовым классом. Класс, принимающий эти компоненты, называется производным классом. Способность класса пользоваться методами, определенными для его предков, составляет сущность принципа наследуемости свойств. Например, можно определить в программе класс “Человек” с компонентами “Фамилия”, “Имя”, “Отчество” и год рождения. Функции-методы, которые могут понадобиться при работе с объектами этого класса, такие, как: “ЗадатьФамилию”, “ДатьГодРождения”, “ВывестиНаЭкранФИО” и т.д., также будут определены в этом классе. Если в программе понадобится определить какой-либо другой объект, скажем, “Работник” или “Студент”, становится очевидным, что этот класс будет частным случаем класса “Человек”, поскольку все компоненты класса “Человек” необходимо полностью переписать в класс “Работник” или “Студент”. Намного удобнее в этом случае просто каким-либо образом при определении таких производных классов сослаться на базовый класс, сказав тем самым, что все его компоненты заимствуются. В том же случае, если нужно доопределить в производном классе собственные компоненты, например “Зарплата” или “НомерЗачетнойКнижки”, их можно описать в производном классе заново. Такой механизм наследования действительно существует в С++.

Производный класс строится на базе уже существующего с по- мощью конструкции следующего вида:

class Base {

// Элементы базового класса

};

class Derived: [модификатор доступа] Base {

// Элементы производного класса

};

При определении производного класса за его именем следуют разделитель - двоеточие (:), затем необязательный модификатор доступа и имя базового класса. Модификатор доступа определяет область видимости наследуемых компонентов для производного класса и его возможных потомков.

Рассмотрим пример.

class Level0 { // Базовый класс

private: int a;

protected: int b;

public: int c;

void f0();

};

class Level1: public Level0 { // Производный класс

private: int d;

protected: int e;

public: int f;

void f1();

};

В приведенном примере производный класс Level1 наследует компоненты базового класса Level0. Производный класс содержит все компоненты базового, а также компоненты, определенные в самом производном классе.