Вход

Полиморфизм объектных переменных: смысл, преимущества использования

Рекомендуемая категория для самостоятельной подготовки:
Реферат*
Код 204790
Дата создания 12 мая 2017
Страниц 7
Мы сможем обработать ваш заказ (!) 26 апреля в 12:00 [мск]
Файлы будут доступны для скачивания только после обработки заказа.
790руб.
КУПИТЬ

Описание

-
...

Содержание

-

Введение

-

Фрагмент работы для ознакомления

к. они не являются полиморфнымиНо когда объекты обозначаются с помощью указателей или ссылок используется динамическое связывание при условии, что метод объявлен как виртуальныйДинамическое связывание в языке Си++ и виртуальные методыМетод, который объявлен с ключевым словом virtual, называется виртуальнымЕсли он объявлен именно так, то поиск метода начинается с динамического типа, если нет - со статическогоТип является полиморфным, если в нем имеются виртуальные методыПример использования динамического связыванияclass MyGraphicsPrimitive2D {public:void setPos(int x, int y) { printf("Pos = (%d,%d)\n"); }virtual void draw() { puts("MyGraphicsPrimitive2D"); }};class MyEllipse: public MyGraphicsPrimitive2D {public:virtual void draw() { puts("MyEllipse"); }};class MyRectangle: public MyGraphicsPrimitive2D {public:void setPos(int x, int y) { printf("Rectangle pos = (%d,%d)\n"); }virtual void draw() { puts("MyRectangle"); }};class MyCircle: public MyEllipse {public:virtual void draw() { puts("MyCircle"); }};int _tmain(int argc, _TCHAR* argv[]) {// Ооздаем массив для хранения ЛЮБЫХ // 3-х графических примитивов MyGraphicsPrimitive2D *primitives[3];// Заполняем массив разнородными графическими// примитивами.Динамический тип элемента массива// не совпадает со статическим primitives[0]= new MyCircle(); primitives[1]= new MyEllipse(); primitives[2]= new MyRectangle();……..// Отрисовываем все примитивы. Так как в // контейнере указатели на объекты и // метод draw() объявлен как виртуальный, // то используется метод динамического типаfor(int i = 0; i < 3; i++) {primitives[i]->draw();………Пример использования статического связывания// Хотя переменная primitives[2] полиморфная, но // происходит СТАТИЧЕСКОЕ связывание, т.к. // метод не объявлен как виртуальный primitives[2]->setPos(30, 20);getch(); return 0;}Pos = (30, 20)Сравнение статического и динамического связыванияпоиск при статическом связыванииMyRectangleMyRectangle::setPos() MyGraphicsPrimitive2D::setPos()поиск при динамическом связыванииMyCircleMyCircle::draw() MyEllipse::draw() MyGraphicsPrimitive2D::draw()Рекомендации по использованию полиморфных переменных в языке Си++Для использования полиморфной переменной необходимо:1)Объявить переменную типа указатель или ссылку на базовый класс2)Сделать базовый класс полиморфным, т.е. объявить в нем хотя бы один виртуальный метод3)Виртуальными должны быть объявлены все методы, которые будут переопределены в производном классе и к которым будет обращение через полиморфную переменнуюПроблема обращения полиморфизмаЧаще всего, данная проблема возникает в связи с использованием полиморфных контейнеровМы помещаем в полиморфный контейнер разнотипные объекты (например, различные примитивы), однако при извлечении объекта не можем сказать, какой перед нами объект и какими специфическими свойствами и специфическим поведением он обладаетПример проблемы обращения полиморфизма// Создаем массив для хранения ЛЮБЫХ// 3-х графических примитивов MyGraphicsPrimitive2D *primitives[3];// Заполняем массив разнородными графическими // примитивами .....// Пытаемся изменить радиус у окружностей, // возможны проблемы, т.к.

Список литературы

-
Очень похожие работы
Пожалуйста, внимательно изучайте содержание и фрагменты работы. Деньги за приобретённые готовые работы по причине несоответствия данной работы вашим требованиям или её уникальности не возвращаются.
* Категория работы носит оценочный характер в соответствии с качественными и количественными параметрами предоставляемого материала. Данный материал ни целиком, ни любая из его частей не является готовым научным трудом, выпускной квалификационной работой, научным докладом или иной работой, предусмотренной государственной системой научной аттестации или необходимой для прохождения промежуточной или итоговой аттестации. Данный материал представляет собой субъективный результат обработки, структурирования и форматирования собранной его автором информации и предназначен, прежде всего, для использования в качестве источника для самостоятельной подготовки работы указанной тематики.
bmt: 0.005
© Рефератбанк, 2002 - 2024