Инфоурок Другое ПрезентацииПроизводные классы

Производные классы

Скачать материал
Скачать материал "Производные классы"

Получите профессию

Бухгалтер

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Методические разработки к Вашему уроку:

Получите новую специальность за 6 месяцев

Руководитель реабилитационного подразделения

Описание презентации по отдельным слайдам:

  • Артур Садеков
Лекция 8.Производные классы.Часть 3.

    1 слайд

    Артур Садеков

    Лекция 8.
    Производные классы.
    Часть 3.

  • Nortel Networks ConfidentialЗащищенные членыclass Employee {
  string name, s...

    2 слайд

    Nortel Networks Confidential
    Защищенные члены
    class Employee {
    string name, surname;
    protected:
    void retire();
    //...
    };
    class Programmer:
    public Employee {
    int team;
    public:
    ~Programmer() { retire(); }
    //...
    };
    void ret(Employee &re,
    Programmer &rp)
    {
    re.retire();
    rp.retire();
    }
    class Proj_Manager: public Employee
    { /*...*/};

    class HR_Assistant: public Employee
    {
    void fire(Proj_Manager *p)
    {
    p->retire();
    retire();
    }
    };
    // ошибка !!!
    // ошибка !!!
    // ошибка !!!

  • Nortel Networks ConfidentialИспользование защищенных членовПроизводный класс...

    3 слайд

    Nortel Networks Confidential
    Использование защищенных членов
    Производный класс имеет доступ к защищенным членам базового (но только для объектов собственного типа)
    Защищенные данные приводят к проблемам сопровождения
    Защищенные функции - хороший способ задания операций для использования в производных классах

  • Nortel Networks ConfidentialУправление доступомпользователиФункции-члены и др...

    4 слайд

    Nortel Networks Confidential
    Управление доступом
    пользователи
    Функции-члены и друзья производных классов
    Функции-члены и друзья самого класса

  • Nortel Networks ConfidentialДоступ к базовым классамpublic
private
protected

    5 слайд

    Nortel Networks Confidential
    Доступ к базовым классам
    public
    private
    protected

  • Nortel Networks ConfidentialПравила доступа (public)class Employee {
public:...

    6 слайд

    Nortel Networks Confidential
    Правила доступа (public)
    class Employee {
    public:
    string name() const;
    protected:
    void retire();
    };

    class Programmer:
    public Employee {
    /*…*/
    };

    class Team_Leader:
    public Programmer{
    /*…*/
    };

    void Team_Leader::~Team_Leader()
    {
    retire();
    }
    void f(Employee *emp,
    Programmer *prog,
    Team_Leader *tleader)
    {
    prog->name();
    tleader->name();
    prog->retire();
    emp = prog;
    prog = tleader;
    emp = tleader;
    }
    // ошибка !!!

  • Nortel Networks ConfidentialПравила доступа (private)class Stack {
public:...

    7 слайд

    Nortel Networks Confidential
    Правила доступа (private)
    class Stack {
    public:
    void push(char);
    char pop();
    protected:
    int max_size();
    int cur_size();
    private:
    int max_size;
    //...
    };
    class Tough_Stack: private Stack {
    public:
    void put(char c) { push(c); }
    char get() { if ( cur_size()>0 )
    return pop(); }
    };
    void f(Tough_Stack *p)
    {
    p->put(‘a’);
    p->pop();
    Stack *pbase = p;
    pbase->pop();
    }
    class Semi_Tough_Stack :
    public Tough_Stack {
    public:
    char pop(Tough_Stack *p) {
    Stack *pbase = p;
    return pbase->pop();
    }
    };
    // ошибка !!!
    // !!!
    // !!!
    // !!!
    // !!!

  • Nortel Networks ConfidentialПравила доступа (protected)class Unit {
public:...

    8 слайд

    Nortel Networks Confidential
    Правила доступа (protected)
    class Unit {
    public:
    bool move (int x, int y);
    bool fire(int x, int y);
    bool no_ammo();
    bool reload();
    void retreat();
    void wound(int precent);
    private:
    int X, Y;
    int ammo;
    int magazine;
    int health;
    };
    class Soldier: protected Unit {
    public:
    bool move (int x, int y);
    bool shoot(int x, int y);
    void defend();
    protected:
    void wound(int precent);
    };

  • Nortel Networks ConfidentialПравила доступа (protected)bool Soldier::move(int...

    9 слайд

    Nortel Networks Confidential
    Правила доступа (protected)
    bool Soldier::move(int x, int y)
    {
    return Unit::move(x,y);
    }

    bool Soldier::shoot(int x, int y)
    {
    if (no_ammo())
    { if (reload()==false)
    return false;
    }
    return fire(x,y);
    }

    void Soldier::wound(int precent)
    {
    Unit::wound(precent);
    if (health()<20)
    retreat();
    }
    void madness()
    {
    Soldier sol;
    if (!sol.shoot(x,y))
    {
    sol.retreat();
    }

    if (sol.no_ammo())
    {
    s1.wound(100);
    }
    }
    // ошибка !!!
    // !!!
    // ошибка !!!

  • Nortel Networks ConfidentialДоступ к базовым классамОткрытое наследование дел...

    10 слайд

    Nortel Networks Confidential
    Доступ к базовым классам
    Открытое наследование делает производный класс подтипом базового
    Защищенное и закрытое наследование используются для выражения деталей реализации
    Защищенные базовые классы полезны в иерархиях с дальнейщим наследованием
    Закрытые базовые классы полезны для “ужесточения интерфейса”

  • Nortel Networks ConfidentialМножественное наследованиесlass Storable_Process...

    11 слайд

    Nortel Networks Confidential
    Множественное наследование
    сlass Storable_Process :
    public Process,
    public Storable {
    //...
    };
    void f(Storable_Process& rSP)
    {
    rSP.read(); // Storable::read()
    rSP.run(); // Process::run()
    rSP.dump(std::cerr);
    rSP.stop(); // Process::stop()
    rSP.write(); // Storable::write()
    }
    void start(Process*);
    bool check_filename(Storable*);

    void susp(Storable_Process* pSP)
    {
    if ( check_filename(pSP) )
    {
    start(pSP);
    }
    }

  • Nortel Networks ConfidentialМножественное наследование (продолжение)сlass Pro...

    12 слайд

    Nortel Networks Confidential
    Множественное наследование (продолжение)
    сlass Process {
    //...
    virtual void pending() = 0;
    };
    сlass Storable_Process :
    public Process,
    public Storable {
    //…
    virtual void pending();
    virtual void prepare();
    };


    сlass Storable {
    //...
    virtual void prepare() = 0;
    };
    Виртуальные функции работают как обычно

  • Nortel Networks ConfidentialРазрешение неоднозначностиclass Process {
  //......

    13 слайд

    Nortel Networks Confidential
    Разрешение неоднозначности
    class Process {
    //...
    virtual debug_info* get_debug();
    };
    class Storable_Process :
    public Process,
    public Storable {
    //...
    virtual debug_info* get_debug()
    {
    debug_info* d1 =
    Storable::get_debug();
    debug_info* d2 =
    Process::get_debug();
    return d1->merge(d2);
    }
    };
    class Storable {
    //...
    virtual debug_info* get_debug();
    };
    void f(Storable_Process* pSP)
    {
    debug_info* dip= pSP->get_debug();
    dip= pSP->Storable::get_debug();
    dip= pSP->Process::get_debug();
    }

  • Nortel Networks Confidential Использование множественного наследования«Склеив...

    14 слайд

    Nortel Networks Confidential
    Использование множественного наследования
    «Склеивание» двух не связанных классов вместе в качестве реализации третьего класса
    Реализация абстрактных классов

  • Nortel Networks ConfidentialПример реализации абстрактного классаclass Drink...

    15 слайд

    Nortel Networks Confidential
    Пример реализации абстрактного класса
    class Drink {
    public:
    virtual Liquid* drink() =0;
    };
    class Bottle {
    public:
    void fill(Liquid*);
    Liquid* pour(Volume);
    void open();
    void break();
    bool opened() const;
    bool empty() const;
    };
    class BBeer: public Drink,
    protected Bottle {
    /*...*/ };
    Liquid* BBeer::drink()
    {
    if (!opened()) open();
    if (!empty())
    return pour(VOL_GULP));
    return NULL;
    }
    void get_drunk(BBeer* beer,
    Human *man)
    {
    beer->break();
    man->consume(beer->drink());
    Bottle *bottle = &beer;
    bottle->break();
    }
    // ошибка !!!
    // ошибка !!!
    // !!!

  • Nortel Networks ConfidentialПример реализации абстрактного классаbool Human::...

    16 слайд

    Nortel Networks Confidential
    Пример реализации абстрактного класса
    bool Human::get_drunk(Drink* alc[], int num)
    {
    for(int i=0; i<num || i_am_drunk() ; ++i)
    {
    Liquid *p = 0;
    while( (p=acl[i]->drink()) !=0 )
    {
    consume(p);
    }
    }
    return i_am_drunk();
    }

  • Nortel Networks ConfidentialПовторяющиеся базовые классыclass Link {
  //......

    17 слайд

    Nortel Networks Confidential
    Повторяющиеся базовые классы
    class Link {
    //...
    Link* next();
    };
    сlass Task_Queue: public Link {
    //...
    };
    сlass Processors: public Link {
    //...
    };
    сlass Distributor : public Task_Queue,
    public Processors {
    //...
    };
    Link
    Task_Queue
    Link
    Processors
    Distributor

  • Nortel Networks ConfidentialВиртуальные базовые классыclass Storable {
public...

    18 слайд

    Nortel Networks Confidential
    Виртуальные базовые классы
    class Storable {
    public:
    Storable(const char*)
    virtual void read() =0;
    virtual void write() =0;
    virtual ~Storable() {write();}
    private:
    const char* store;
    };
    class Radio : public Transmitter,
    public Receiver {
    Radio() : Storable(“radio.stor”)
    {}
    virtual void write()
    { Transmitter::write();
    Receiver::write(); }
    };
    Transmitter
    Storable
    Receiver
    Radio
    class Transmitter: public virtual Storable {
    //…
    virtual void write();
    };
    class Receiver: public virtual Storable {
    //…
    virtual void write();
    };

  • Nortel Networks ConfidentialКонец

    19 слайд

    Nortel Networks Confidential
    Конец

Получите профессию

Бухгалтер

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Скачать материал

Найдите материал к любому уроку, указав свой предмет (категорию), класс, учебник и тему:

6 671 630 материалов в базе

Скачать материал

Вам будут интересны эти курсы:

Оставьте свой комментарий

Авторизуйтесь, чтобы задавать вопросы.

  • Скачать материал
    • 20.09.2020 100
    • PPTX 354.5 кбайт
    • Оцените материал:
  • Настоящий материал опубликован пользователем Федосеева Светлана Алексеевна. Инфоурок является информационным посредником и предоставляет пользователям возможность размещать на сайте методические материалы. Всю ответственность за опубликованные материалы, содержащиеся в них сведения, а также за соблюдение авторских прав несут пользователи, загрузившие материал на сайт

    Если Вы считаете, что материал нарушает авторские права либо по каким-то другим причинам должен быть удален с сайта, Вы можете оставить жалобу на материал.

    Удалить материал
  • Автор материала

    Федосеева Светлана Алексеевна
    Федосеева Светлана Алексеевна
    • На сайте: 3 года и 4 месяца
    • Подписчики: 0
    • Всего просмотров: 74125
    • Всего материалов: 218

Ваша скидка на курсы

40%
Скидка для нового слушателя. Войдите на сайт, чтобы применить скидку к любому курсу
Курсы со скидкой

Курс профессиональной переподготовки

Бухгалтер

Бухгалтер

500/1000 ч.

Подать заявку О курсе
  • Сейчас обучается 29 человек из 22 регионов

Курс профессиональной переподготовки

Организация деятельности библиотекаря в профессиональном образовании

Библиотекарь

300/600 ч.

от 7900 руб. от 3650 руб.
Подать заявку О курсе
  • Сейчас обучается 288 человек из 67 регионов
  • Этот курс уже прошли 852 человека

Курс профессиональной переподготовки

Руководство электронной службой архивов, библиотек и информационно-библиотечных центров

Начальник отдела (заведующий отделом) архива

600 ч.

9840 руб. 5600 руб.
Подать заявку О курсе
  • Этот курс уже прошли 25 человек

Курс профессиональной переподготовки

Библиотечно-библиографические и информационные знания в педагогическом процессе

Педагог-библиотекарь

300/600 ч.

от 7900 руб. от 3650 руб.
Подать заявку О курсе
  • Сейчас обучается 500 человек из 71 региона
  • Этот курс уже прошли 2 335 человек

Мини-курс

История и основы галерейного бизнеса

3 ч.

780 руб. 390 руб.
Подать заявку О курсе

Мини-курс

Стратегии карьерного роста и развития

10 ч.

1180 руб. 590 руб.
Подать заявку О курсе

Мини-курс

Творчество и технологии в медиакоммуникациях

8 ч.

1180 руб. 590 руб.
Подать заявку О курсе