Презентация ООП 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 слайд
![Наследование и шаблоны](/documents_6/17897f62518446f20ad9d5255586c0c3/img0.jpg)
Содержание слайда: Наследование и шаблоны
Рассмотрим две задачи проектирования:
1. Создать классы для представления стеков.
2. Создать классы для описания кошек.
(Каждая порода кошек незначительно отличается от остальных. Подобно любым объектам, «кошек» в программе можно создавать и удалять. Помимо этого о кошках можно сказать, что они только едят и спят. Однако каждая порода ест и спит присущим только ей неподражаемым способом. )
Вопрос: влияет ли тип Т на поведение класса?
№2 слайд
![class Stack public Stack](/documents_6/17897f62518446f20ad9d5255586c0c3/img1.jpg)
Содержание слайда: 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); // и присваивание
}
№4 слайд
![Stack Stack top Инициализация](/documents_6/17897f62518446f20ad9d5255586c0c3/img3.jpg)
Содержание слайда: 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](/documents_6/17897f62518446f20ad9d5255586c0c3/img4.jpg)
Содержание слайда: 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;
…
}
№7 слайд
![Композиция как моделирование](/documents_6/17897f62518446f20ad9d5255586c0c3/img6.jpg)
Содержание слайда: Композиция как моделирование отношения «часть» (“part of”)
Композиция (агрегирование, включение, вложение) – отношение между типами, которое возникает тогда, когда объект одного типа содержит в себе объекты других типов. Это простейший механизм для создания нового класса путем объединения нескольких объектов существующих классов в единое целое.
При агрегировании между классами действует «отношение принадлежности»
У машины есть кузов, колеса и двигатель
У человека есть голова, руки, ноги и тело
У треугольника есть вершины
Вложенные объекты обычно объявляются закрытыми (private) внутри класса-агрегата.
№9 слайд
![template lt typename T gt](/documents_6/17897f62518446f20ad9d5255586c0c3/img8.jpg)
Содержание слайда: 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](/documents_6/17897f62518446f20ad9d5255586c0c3/img9.jpg)
Содержание слайда: 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](/documents_6/17897f62518446f20ad9d5255586c0c3/img10.jpg)
Содержание слайда: Закрытое наследование
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](/documents_6/17897f62518446f20ad9d5255586c0c3/img11.jpg)
Содержание слайда: 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](/documents_6/17897f62518446f20ad9d5255586c0c3/img12.jpg)
Содержание слайда: Пустые базовые классы
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);
№16 слайд
![class Uncopyable protected](/documents_6/17897f62518446f20ad9d5255586c0c3/img15.jpg)
Содержание слайда: class Uncopyable{
protected:
Uncopyable() {} // разрешить конструирование
~Uncopyable() {} // и уничтожение
// объектов производных классов
private:
Uncopyable(const Uncopyable&); // но предотвратить копирование
Uncopyable& operator=(const Uncopyable&);
};
class HomeForSale : private Uncopyable {
... }; // в этом класс больше нет ни конструктора копирования, ни оператора присваивания
№19 слайд
![Защищённое наследование](/documents_6/17897f62518446f20ad9d5255586c0c3/img18.jpg)
Содержание слайда: Защищённое наследование
Защищенное наследование – наследование реализации, доступной для последующего наследования
При защищенном наследовании открытые поля и методы родительского класса становятся защищенными полями и методами производного
Данные методы могут использоваться классами, порожденными от производного
Как и в случае закрытого наследования, порожденный класс должен предоставить собственный интерфейс
Разницу между защищенным и закрытым наследованием почувствуют лишь наследники производного класса
№20 слайд
![class CIntArray public int](/documents_6/17897f62518446f20ad9d5255586c0c3/img19.jpg)
Содержание слайда: 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 слайд
![Наиболее важные соответствия](/documents_6/17897f62518446f20ad9d5255586c0c3/img20.jpg)
Содержание слайда: Наиболее важные соответствия отношений конструкциям С++
1. Наличие общего базового класса означает наличие общих свойств. Если класс D1 и класс D2 объявляют класс В своим базовым классом, то D1 и D2 наследуют общие элементы данных и/или общие функции-члены В.
2. Открытое наследование означает «есть разновидность». Если класс D открыто наследует от класса В, то каждый объект типа D также является объектом типа В, но не наоборот.
3. Закрытое наследование означает «реализацию посредством». Если класс D закрыто наследует от класса В, объекты типа D достаточно просто реализуются с помощью объектов типа В; между объектами типов В и D нет концептуальной взаимосвязи.
4. Вложение означает «содержит» или «реализуется посредством». Если класс А содержит элементы данных типа В, то объекты типа А либо имеют компонент типа В, либо реализуются посредством объектов типа В.
Скачать все slide презентации ООП 7. Наследование и шаблоны одним архивом:
Похожие презентации
-
ООП. Наследование и полиморфизм. Тема 05
-
С. Программирование на языке высокого уровня. Наследование. Шаблоны классов. (Лекция 6)
-
ООП 6. Обобщённое программирование. Шаблоны (параметризованные типы)
-
ООП 8. Варианты наследования
-
Работа с контентом. Шаблон контент-плана
-
Шаблонизация функций и классов
-
ООП Java. Продолжение
-
Объектноориентированное программирование. Наследование
-
Разработка программы парсинга psd шаблона в website
-
Основные понятия ООП