🗊Презентация Полиморфизм

Нажмите для полного просмотра!
Полиморфизм, слайд №1Полиморфизм, слайд №2Полиморфизм, слайд №3Полиморфизм, слайд №4Полиморфизм, слайд №5Полиморфизм, слайд №6Полиморфизм, слайд №7Полиморфизм, слайд №8Полиморфизм, слайд №9Полиморфизм, слайд №10Полиморфизм, слайд №11Полиморфизм, слайд №12Полиморфизм, слайд №13Полиморфизм, слайд №14Полиморфизм, слайд №15Полиморфизм, слайд №16Полиморфизм, слайд №17Полиморфизм, слайд №18Полиморфизм, слайд №19Полиморфизм, слайд №20Полиморфизм, слайд №21Полиморфизм, слайд №22Полиморфизм, слайд №23

Содержание

Вы можете ознакомиться и скачать презентацию на тему Полиморфизм. Доклад-сообщение содержит 23 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

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


Слайд 1





Тема 14
Полиморфизм
Описание слайда:
Тема 14 Полиморфизм

Слайд 2





Полиморфизм
Полиморфизм (в общем случае) – способность объекта изменять свою форму в процессе его функционирования.
В программировании полиморфизм – свойство, которое позволяет одно и то же имя использовать для решения двух или более схожих, но технически разных задач.
В С++ полиморфизм реализован:
механизмом перегрузки функций;
механизмом шаблонов;
механизмом переопределения методов класса
Описание слайда:
Полиморфизм Полиморфизм (в общем случае) – способность объекта изменять свою форму в процессе его функционирования. В программировании полиморфизм – свойство, которое позволяет одно и то же имя использовать для решения двух или более схожих, но технически разных задач. В С++ полиморфизм реализован: механизмом перегрузки функций; механизмом шаблонов; механизмом переопределения методов класса

Слайд 3





Пример полиморфизма – метод Module()
class Point2D{
…
public:
  double Module() const;  
…
};
class Point3D: public Point2D{
…
public:
  double Module() const;  
…
};
Описание слайда:
Пример полиморфизма – метод Module() class Point2D{ … public: double Module() const; … }; class Point3D: public Point2D{ … public: double Module() const; … };

Слайд 4





Реализация полиморфизма в методе Module()
Описание слайда:
Реализация полиморфизма в методе Module()

Слайд 5





Примеры использования метода Module()
Описание слайда:
Примеры использования метода Module()

Слайд 6





Странный результат при использовании метода Module()
Причина – ошибка в определении того, какой метод Module() должен использоваться (для класса Point2D или Point3D)
Описание слайда:
Странный результат при использовании метода Module() Причина – ошибка в определении того, какой метод Module() должен использоваться (для класса Point2D или Point3D)

Слайд 7





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

Слайд 8





Объявление виртуального метода Module()
class Point2D{
…
public:
  virtual double Module() const;  
…
};
class Point3D: public Point2D{
…
public:
  virtual double Module() const;  
…
};
Описание слайда:
Объявление виртуального метода Module() class Point2D{ … public: virtual double Module() const; … }; class Point3D: public Point2D{ … public: virtual double Module() const; … };

Слайд 9





Результаты использования виртуального метода Module()
Описание слайда:
Результаты использования виртуального метода Module()

Слайд 10





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

Слайд 11





Пример работы цепочки деструкторов (описание)
// деструкторы включены в состав классов только для
// иллюстрации их работы!

class Point2D{
…
public:
 ~Point2D() { cout << "Point2D done" << endl; }
…
};
class Point3D: public Point2D{
…
public:
 ~Point3D() { cout << "Point3D done" << endl; }
…
};
Описание слайда:
Пример работы цепочки деструкторов (описание) // деструкторы включены в состав классов только для // иллюстрации их работы! class Point2D{ … public: ~Point2D() { cout << "Point2D done" << endl; } … }; class Point3D: public Point2D{ … public: ~Point3D() { cout << "Point3D done" << endl; } … };

Слайд 12





Пример работы цепочки деструкторов (работа)
Результат (уничтожение объектов ведётся в порядке , обратном их созданию):
Описание слайда:
Пример работы цепочки деструкторов (работа) Результат (уничтожение объектов ведётся в порядке , обратном их созданию):

Слайд 13





Неправильная работа цепочки деструкторов
Результат  - деструктор для класса Point3D не вызывается
Причина – деструктор не объявлен как виртуальный!
Описание слайда:
Неправильная работа цепочки деструкторов Результат - деструктор для класса Point3D не вызывается Причина – деструктор не объявлен как виртуальный!

Слайд 14





Правильное объявление деструкторов при наследовании
// виртуальные деструкторы должны быть
// включены в состав классов, 
// даже если их тело пусто!

class Point2D{
…
public:
 virtual ~Point2D() {}
…
};
class Point3D: public Point2D{
…
public:
 virtual ~Point3D() {}
…
};
Описание слайда:
Правильное объявление деструкторов при наследовании // виртуальные деструкторы должны быть // включены в состав классов, // даже если их тело пусто! class Point2D{ … public: virtual ~Point2D() {} … }; class Point3D: public Point2D{ … public: virtual ~Point3D() {} … };

Слайд 15





Абстрактные методы и классы
При построении иерархии классов классы, находящиеся на верхних уровнях иерархии, могут не быть реализованы. Это означает, что нельзя создать ни одного объекта, принадлежащего этому классу. Такие классы называются абстрактными.
Необходимость создания абстрактных классов состоит в том, чтобы на верхнем уровне описать полиморфные методы, общие для всех классов-потомков. На уровне абстрактного класса эти методы (абстрактные методы) не могут быть реализованы, они переопределяются в неабстрактных классах-потомках.
Описание слайда:
Абстрактные методы и классы При построении иерархии классов классы, находящиеся на верхних уровнях иерархии, могут не быть реализованы. Это означает, что нельзя создать ни одного объекта, принадлежащего этому классу. Такие классы называются абстрактными. Необходимость создания абстрактных классов состоит в том, чтобы на верхнем уровне описать полиморфные методы, общие для всех классов-потомков. На уровне абстрактного класса эти методы (абстрактные методы) не могут быть реализованы, они переопределяются в неабстрактных классах-потомках.

Слайд 16





Пример иерархии с абстрактными классами
Описание слайда:
Пример иерархии с абстрактными классами

Слайд 17





Описание абстрактных методов и их переопределение в неабстрактных классах
Описание слайда:
Описание абстрактных методов и их переопределение в неабстрактных классах

Слайд 18





Вызов абстрактных методов в абстрактных классах, их переопределение
Описание слайда:
Вызов абстрактных методов в абстрактных классах, их переопределение

Слайд 19





Наличие тела в абстрактных методах
Описание слайда:
Наличие тела в абстрактных методах

Слайд 20


Полиморфизм, слайд №20
Описание слайда:

Слайд 21





Проблемы при работе с классом exception
Использование только класса exception при выбросе исключений приводит к тому, что анализ перехваченного исключения и его правильная обработка становится сложной задачей:
void f1() { …
  throw exception(”Error”);
… }
void f2() { …
  throw exception(”Error”);
… }
try {
	f1();
	f2();
}
catch (const exception& e) {
// непонятно, где выброшено исключение
}
Описание слайда:
Проблемы при работе с классом exception Использование только класса exception при выбросе исключений приводит к тому, что анализ перехваченного исключения и его правильная обработка становится сложной задачей: void f1() { … throw exception(”Error”); … } void f2() { … throw exception(”Error”); … } try { f1(); f2(); } catch (const exception& e) { // непонятно, где выброшено исключение }

Слайд 22





Построение иерархии исключений
Одно из решений этой проблемы состоит в создании собственных классов-исключений – потомков класса exception. Работа этих исключений ничем не отличается от работы exception, поэтому достаточно написать конструкторы (которые не наследуются):
Описание слайда:
Построение иерархии исключений Одно из решений этой проблемы состоит в создании собственных классов-исключений – потомков класса exception. Работа этих исключений ничем не отличается от работы exception, поэтому достаточно написать конструкторы (которые не наследуются):

Слайд 23





Важен порядок перехвата исключений: вначале обрабатываются потомки, а потом – предки! Несоблюдение этого правила приведёт к тому, что специфическая обработка исключений-потомков будет пропущена.
Важен порядок перехвата исключений: вначале обрабатываются потомки, а потом – предки! Несоблюдение этого правила приведёт к тому, что специфическая обработка исключений-потомков будет пропущена.
Описание слайда:
Важен порядок перехвата исключений: вначале обрабатываются потомки, а потом – предки! Несоблюдение этого правила приведёт к тому, что специфическая обработка исключений-потомков будет пропущена. Важен порядок перехвата исключений: вначале обрабатываются потомки, а потом – предки! Несоблюдение этого правила приведёт к тому, что специфическая обработка исключений-потомков будет пропущена.



Похожие презентации
Mypresentation.ru
Загрузить презентацию