Презентация ООП 7. Наследование и шаблоны онлайн

На нашем сайте вы можете скачать и просмотреть онлайн доклад-презентацию на тему ООП 7. Наследование и шаблоны абсолютно бесплатно. Урок-презентация на эту тему содержит всего 21 слайд. Все материалы созданы в программе PowerPoint и имеют формат ppt или же pptx. Материалы и темы для презентаций взяты из открытых источников и загружены их авторами, за качество и достоверность информации в них администрация сайта не отвечает, все права принадлежат их создателям. Если вы нашли то, что искали, отблагодарите авторов - поделитесь ссылкой в социальных сетях, а наш сайт добавьте в закладки.
Презентации » Устройства и комплектующие » ООП 7. Наследование и шаблоны



Оцените!
Оцените презентацию от 1 до 5 баллов!
  • Тип файла:
    ppt / pptx (powerpoint)
  • Всего слайдов:
    21 слайд
  • Для класса:
    1,2,3,4,5,6,7,8,9,10,11
  • Размер файла:
    324.50 kB
  • Просмотров:
    61
  • Скачиваний:
    0
  • Автор:
    неизвестен



Слайды и текст к этой презентации:

№1 слайд
Наследование и шаблоны
Содержание слайда: Наследование и шаблоны Рассмотрим две задачи проектирования: 1. Создать классы для представления стеков. 2. Создать классы для описания кошек. (Каждая порода кошек незначительно отличается от остальных. Подобно любым объектам, «кошек» в программе можно создавать и удалять. Помимо этого о кошках можно сказать, что они только едят и спят. Однако каждая порода ест и спит присущим только ей неподражаемым способом. ) Вопрос: влияет ли тип Т на поведение класса?

№2 слайд
class Stack public Stack
Содержание слайда: class Stack { public: Stack(); -Stack(); void push (const T& object) ; T pop(); bool empty() const; // Пуст ли стек? private: struct StackNode { // Узел связного списка. T data; // Данные в этом узле. StackNode *next; // Следующий узел в списке. StackNode(const Т& newData, StackNode *nextNode) : data(newData), next(nextNode) {} // Конструктор StackNode инициализирует оба поля. }; StackNode *top; // Вершина стека. Stack(const Stack& rhs); // Запретить копирование Stacks operator=(const Stack& rhs); // и присваивание }

№3 слайд
Содержание слайда:

№4 слайд
Stack Stack top Инициализация
Содержание слайда: Stack::Stack(): top(0) {} // Инициализация вершины значением null, void Stack::push(const T& object) { top = new StackNode (object, top); // Добавить новый узел в начале списка } Т Stack::рор() { StackNode *topOfStack = top; // Запомнить верхний узел. top = top->next; Т data = topOfStack->data; // Запомнить данные узла. delete topOfStack; return data; } Stack::~Stack(){ while (top) { StackNode *toDie = top; // Получить указатель на вершину, top = top->next; // Перейти к следующему узлу, delete toDie; // Удалить предыдущую вершину. } } bool Stack::empty() const { return top ==0; } template<class Т> class Stack { //В точности то же } ;

№5 слайд
class Cat public virtual Cat
Содержание слайда: class Cat { public: virtual ~Cat(); virtual void eat () = 0; // Все кошки едят. virtual void sleep () = 0; // Все кошки спят. } class Siamese: public Cat { public: void eat(); void sleep(); } ; class BritishShortHairedTabby: public Cat { public: void eat(); void sleep(); } ; class Stack { // Стек чего угодно. public: virtual void push (const ??? object) = 0; virtual ??? pop() = 0; … }

№6 слайд
Шаблоны должны быть
Содержание слайда: Шаблоны должны быть использованы для генерации семейств классов, тип объектов которых не влияет на поведение функций этих классов. Наследование следует использовать для создания семейств классов, тип объектов которых влияет на поведение функций создаваемых классов.

№7 слайд
Композиция как моделирование
Содержание слайда: Композиция как моделирование отношения «часть» (“part of”) Композиция (агрегирование, включение, вложение) – отношение между типами, которое возникает тогда, когда объект одного типа содержит в себе объекты других типов. Это простейший механизм для создания нового класса путем объединения нескольких объектов существующих классов в единое целое. При агрегировании между классами действует «отношение принадлежности» У машины есть кузов, колеса и двигатель У человека есть голова, руки, ноги и тело У треугольника есть вершины Вложенные объекты обычно объявляются закрытыми (private) внутри класса-агрегата.

№8 слайд
class Address ... адрес
Содержание слайда: class Address {...}; // адрес проживания class PhoneNumber {...}; class Person { public: ... private: std::string name; // вложенный объект Address address; // то же PhoneNumber voiceNumber; // то же PhoneNumber faxNumber; // то же };

№9 слайд
template lt typename T gt
Содержание слайда: template<typename T> // неправильный способ использования class Set: public std::list<T> {...}; // list для определения Set template<typename T> // правильный способ использования list class Set { // для определения Set public: bool member(const T& item) const; void insert(const T& item); void remove(const T& item); int cardinality() const; private: std::list<T> rep; // представление множества };

№10 слайд
template lt typename T gt
Содержание слайда: template<typename T> bool Set<T>::member(const T& item) const { return std::find(rep.begin(), rel.end(), item) != rep.end(); } template<typename T> void Set<T>::insert(const T& item) { if(!member(item)) rep.push_back(item); } template<typename T> void Set<t>::remove(const T& item) { typename std::list<T>::iterator it = std::find(rep.begin(), rep.end(), item); if(it != rep.end()) rep.erase(it); } template<typename T> int Set<T>:: cardinality() const { return rep.size(); }

№11 слайд
Закрытое наследование class
Содержание слайда: Закрытое наследование class Person {...} class Student: private Person {...} // теперь наследование закрытое   void eat(const Person& p); // все люди могут есть void study(const Student& s); // только студенты учатся Person p; // p – человек (Person) Student s; // s – студент (Student) eat(p); // нормально, p – типа Person eat(s); // ошибка! Student не является объектом Person

№12 слайд
class Timer public explicit
Содержание слайда: class Timer { public: explicit Timer(int tickFrequency); virtual void onTick() const; //автоматически вызывается при каждом тике ... }; class Widget: private Timer { private: virtual void onTick() const; // просмотр данных об использовании Widget и т. п. }; class Widget { private: class WidgetTimer: public Timer { public: virtual void onTick() const; ... }; WidgetTimer timer; ... };

№13 слайд
Пустые базовые классы class
Содержание слайда: Пустые базовые классы class Empty {}; // не имеет данных, поэтому объекты // не должны занимать памяти class HoldsAnInt{ //память, по идее, нужна только для int private: int x; Empty e; // не должен занимать память }; // sizeof(HoldsAnlnt) > sizeof(int); class HoldsAnInt: private Empty{ private: int x; }; // sizeof(HoldsAnlnt) = sizeof(int);

№14 слайд
Запрет генерации методов
Содержание слайда: Запрет генерации методов класса class HomeForSale {...}; HomeForSale h1; HomeForSale h2; HomeForSale h3(h1); // попытка скопировать h1 – // не должно компилироваться! h1 = h2; // попытка скопировать h2 – // не должно компилироваться!

№15 слайд
class HomeForSale public ...
Содержание слайда: class HomeForSale { public: ... private: HomeForSale(const HomeForSale&); // только объявления HomeForSale& operator=( const HomeForSale&); };

№16 слайд
class Uncopyable protected
Содержание слайда: class Uncopyable{ protected: Uncopyable() {} // разрешить конструирование ~Uncopyable() {} // и уничтожение // объектов производных классов private: Uncopyable(const Uncopyable&); // но предотвратить копирование Uncopyable& operator=(const Uncopyable&); }; class HomeForSale : private Uncopyable { ... }; // в этом класс больше нет ни конструктора копирования, ни оператора присваивания

№17 слайд
Варианты наследования По типу
Содержание слайда: Варианты наследования По типу наследования Публичное (открытое) наследование Приватное (закрытое) наследование Защищенное наследование По количеству базовых классов Одиночное наследование (один базовый класс) Множественное наследование (два и более базовых классов)

№18 слайд
Модификатор наследования
Содержание слайда: Модификатор наследования

№19 слайд
Защищённое наследование
Содержание слайда: Защищённое наследование Защищенное наследование – наследование реализации, доступной для последующего наследования При защищенном наследовании открытые поля и методы родительского класса становятся защищенными полями и методами производного Данные методы могут использоваться классами, порожденными от производного Как и в случае закрытого наследования, порожденный класс должен предоставить собственный интерфейс Разницу между защищенным и закрытым наследованием почувствуют лишь наследники производного класса

№20 слайд
class CIntArray public int
Содержание слайда: class CIntArray { public: int operator[](int index)const; int& operator[](int index); int GetLength()const; void InsertItem(int index, int value); }; class CIntStack : protected CIntArray { public: void Push(int element); int Pop()const; bool IsEmpty()const; }; class CIntStackEx : public CIntStack { public: int GetNumberOfElements()const; // использует GetLength() };

№21 слайд
Наиболее важные соответствия
Содержание слайда: Наиболее важные соответствия отношений конструкциям С++ 1. Наличие общего базового класса означает наличие общих свойств. Если класс D1 и класс D2 объявляют класс В своим базовым классом, то D1 и D2 наследуют общие элементы данных и/или общие функции-члены В. 2. Открытое наследование означает «есть разновидность». Если класс D открыто наследует от класса В, то каждый объект типа D также является объектом типа В, но не наоборот. 3. Закрытое наследование означает «реализацию посредством». Если класс D закрыто наследует от класса В, объекты типа D достаточно просто реализуются с помощью объектов типа В; между объектами типов В и D нет концептуальной взаимосвязи. 4. Вложение означает «содержит» или «реализуется посредством». Если класс А содержит элементы данных типа В, то объекты типа А либо имеют компонент типа В, либо реализуются посредством объектов типа В.

Скачать все slide презентации ООП 7. Наследование и шаблоны одним архивом: