Главная страница
Навигация по странице:

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

  • Курс ООП в С презентация. ООП в с++(полный курс). Объекты и классы


    Скачать 1.76 Mb.
    НазваниеОбъекты и классы
    АнкорКурс ООП в С презентация
    Дата21.02.2022
    Размер1.76 Mb.
    Формат файлаppt
    Имя файлаООП в с++(полный курс).ppt
    ТипДокументы
    #368655
    страница10 из 26
    1   ...   6   7   8   9   10   11   12   13   ...   26

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


    Наследование – это такое отношение между классами, когда один класс частично или полностью повторяет структуру и поведение другого класса (одиночное наследование) или других (множественное наследование) классов. Наследование устанавливает между классами иерархию "общее-частное".
    Связи наследования также называют обобщениями (generalization) и изображают в виде больших белых стрелок от класса-потомка к классу-предку
    Рассмотрим учет сотрудников организации. Каждый сотрудник – это, прежде всего, человек. Студент, работник, руководитель – частные случаи объекта "человек", определяющего общие характеристики для всех своих разновидностей. Организация этих понятий в иерархию позволяет избежать повторения кода и обращаться с объектами производных классов как с объектами базового.
    Возьмем за основу иерархии класс person, немного изменив его структуру ради соответствия концепции наследования. Поскольку для всех объектов кадровой структуры требуется знать имя, фамилию, а также год рождения для определения возраста, объявим данные атрибуты как protected, заменив заодно тип представления имени и отчества на более удобный в работе тип string.

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


    class person
    {
    public:
    void set_year(int value);
    const int get_year() const;
    void set_sirname(string& value);
    const string& get_sirname() const;
    void set_name(string& value);
    const string& get_name() const;
    protected:
    string name;
    string sirname;
    int year;
    };
    Работник (employee) отличается от просто человека (person) тем, что работает в некотором подразделении (department) и получает определенную заработную плату. Руководитель (manager), являясь в свою очередь работником предприятия, отвечает за определенную группу подчиненных и может получать заработную плату, складывающуюся из основной ставки и надбавки в виде процента от заработной платы своих работников.

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


    Выделять новый класс из существующего стоит лишь тогда, когда он знает или делает то, чего не знает и не делает объект базового класса. Это означает присутствие в производном классе атрибута или метода, неприменимого для объектов класса-предка.
    Когда же требуется только выразить различие между объектами по категориям, достаточно сделать это просто по значению атрибута, выражающего место конкретного объекта среди прочих. В подобном случае наша диаграмма классов могла бы выглядеть так:
    Нам же требуется не просто отличать руководителя от просто работника, но и учитывать его связь с множеством подчиненных. Эта связь, в том числе, может использоваться для расчета заработной платы.

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


    Отношение наследования между классами вовсе не исключает различных видов отношений между их экземплярами. Так, мы вправе связать экземпляр класса manager с множеством объектов, описывающих подчиненных ему работников employee, а каждого из работников – с тем подразделением department, в котором тот работает. Разумно предположить, что и от подразделения можно будет перейти к списку связанных с ним лиц (по атрибуту persons).
    class employee : public person
    {
    public:
    virtual const double get_salary() const;
    void set_salary(double value);
    protected:
    double salary;
    department* Department;
    };
    Связи между экземплярами классов реализуются посредством атрибутов, для которых также следует указывать область видимости в зависимости от того, кому они должны быть доступны.

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


    Механизм наследования классов позволяет строить иерархии, в которых производные классы получают элементы родительских, или базовых, классов и могут дополнять их или изменять их свойства.
    Классы, находящиеся ближе к началу иерархии, объединяют в себе наиболее общие черты для всех нижележащих классов.
    По мере продвижения вниз по иерархии классы приобретают все больше конкретных черт:
    class manager : public employee
    {
    public:
    list Employers;
    virtual const double get_salary();
    };

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


    Правила наследования различных методов:
    Конструкторы не наследуются, поэтому производный класс должен иметь собственные конструкторы.
    Порядок вызова конструкторов:
      Если в конструкторе производного класса явный вызов конструктора базового класса отсутствует, автоматически вызывается конструктор базового класса по умолчанию (без параметров).
      Для иерархии, состоящей из нескольких уровней, конструкторы базовых классов вызываются, начиная с самого верхнего уровня. После этого выполняются конструкторы тех элементов класса, которые являются объектами, в порядке их объявления в классе, а затем исполняется конструктор класса.
      В случае нескольких базовых классов их конструкторы вызываются в порядке объявления.

    1   ...   6   7   8   9   10   11   12   13   ...   26


    написать администратору сайта