Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> В чем смысл полиморфизма и виртуальных функций? 
V
    Опции темы
EuGenius_Krivbass
Дата 23.10.2007, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 29.1.2007
Где: Кривбасс, Днепр Украина

Репутация: нет
Всего: нет



В чем смысл полиморфизма и виртуальных функций?
Как это все работает, объяснять не надо.
Объясните с практической точки зрения, где это применяется. Желательно с примерами.
Согласен, вопрос глупый. Но что поделаешь, если интересно.
PM MAIL ICQ Skype YIM   Вверх
a_n_d_y
Дата 23.10.2007, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 23.10.2006
Где: Ukraine::Kiev

Репутация: нет
Всего: 1



пример из MSDN

Код

    public class Dimensions
    {
        public const double PI = Math.PI;
        protected double x, y;
        public Dimensions()
        {
        }
        public Dimensions(double x, double y)
        {
            this.x = x;
            this.y = y;
        }

        public virtual double Area()
        {
            return x * y;
        }
    }

    public class Circle : Dimensions
    {
        public Circle(double r) : base(r, 0)
        {
        }

        public override double Area()
        {
            return PI * x * x;
        }
    }

    class Sphere : Dimensions
    {
        public Sphere(double r) : base(r, 0)
        {
        }

        public override double Area()
        {
            return 4 * PI * x * x;
        }
    }

    class Cylinder : Dimensions
    {
        public Cylinder(double r, double h) : base(r, h)
        {
        }

        public override double Area()
        {
            return 2 * PI * x * x + 2 * PI * x * y;
        }
    }

    static void Main()
    {
        double r = 3.0, h = 5.0;
        Dimensions c = new Circle(r);
        Dimensions s = new Sphere(r);
        Dimensions l = new Cylinder(r, h);
        // Display results:
        Console.WriteLine("Area of Circle   = {0:F2}", c.Area());    // Circle.Area()
        Console.WriteLine("Area of Sphere   = {0:F2}", s.Area()); // Sphere.Area()
        Console.WriteLine("Area of Cylinder = {0:F2}", l.Area());   // Cylinder.Area()
    }

PM MAIL ICQ Skype MSN   Вверх
EuGenius_Krivbass
Дата 23.10.2007, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 29.1.2007
Где: Кривбасс, Днепр Украина

Репутация: нет
Всего: нет



Я же вроде сказал, не нужно примеров, как это использовать. Объясни на пальцах, где это применяется. Например, упрощается использование плагинов... или че-то подобное. Вобщем таким образом.
PM MAIL ICQ Skype YIM   Вверх
ivashkanet
Дата 23.10.2007, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 3
Всего: 149



EuGenius_Krivbass, например Форме все равно какой компонент на нее положили: кнопку, панель, текстбокс или грид. 
Для нее все они являются объектами класса Control.

Как же получается, что все они выглядят по-разному, реагируют на пользователя по-разному?

Вот тут и включается полиморфизм и виртуальные функции.
Форма вызывает метод Paint (это упрощенно, на самом деле механизм сложнее) элемента Control (а на самом деле это кнопка, например). Этот метод переопределён Кнопкой поэтому будет нарисована кнопка ...
То же самое с обработкой событий и ты-ды.
PM MAIL WWW ICQ   Вверх
EuGenius_Krivbass
Дата 23.10.2007, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 29.1.2007
Где: Кривбасс, Днепр Украина

Репутация: нет
Всего: нет



Уже немного понятно
PM MAIL ICQ Skype YIM   Вверх
ivashkanet
Дата 23.10.2007, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 3
Всего: 149



EuGenius_Krivbass, что конкретно непонятно?

Практических примеров накидать можно много, но они ничем не будут отличаться от того. что я написал.
PM MAIL WWW ICQ   Вверх
EuGenius_Krivbass
Дата 23.10.2007, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 29.1.2007
Где: Кривбасс, Днепр Украина

Репутация: нет
Всего: нет



Еще какой-нибудь примерчик
PM MAIL ICQ Skype YIM   Вверх
a_n_d_y
Дата 23.10.2007, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 23.10.2006
Где: Ukraine::Kiev

Репутация: нет
Всего: 1



Цитата

Желательно с примерами.


Цитата

Я же вроде сказал, не нужно примеров


ты б определился...
PM MAIL ICQ Skype MSN   Вверх
EuGenius_Krivbass
Дата 23.10.2007, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 29.1.2007
Где: Кривбасс, Днепр Украина

Репутация: нет
Всего: нет



Цитата(a_n_d_y @  23.10.2007,  18:46 Найти цитируемый пост)
ты б определился...

Вопрос стоит в том, не как конкретно используется полиморфизм, а где он используется на практике. я знаю, как его применять. и я сам тебе напишу такой же примерчик, но какой в этом смысл?

PM MAIL ICQ Skype YIM   Вверх
ivashkanet
Дата 23.10.2007, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 3
Всего: 149



Еще пример: 90% паттернов проектирования используют полиморфизм, даже более того, они на нем основаны!
PM MAIL WWW ICQ   Вверх
a_n_d_y
Дата 24.10.2007, 01:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 23.10.2006
Где: Ukraine::Kiev

Репутация: нет
Всего: 1



Цитата

Вопрос стоит в том, не как конкретно используется полиморфизм, а где он используется на практике. 


Считай - везде...
Если его нету в какой-нибудь системе, реализованной средствами ОО-языка, то такая система скорее всего неверно спроектирована


PM MAIL ICQ Skype MSN   Вверх
lando1
Дата 30.4.2008, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 30.4.2007

Репутация: нет
Всего: нет



меня интересует следующее - "переопределить" можно и не virtual метод - с использованием new. В чем тут отличие от переопределения virtual метода?
PM MAIL ICQ   Вверх
WERITAS
Дата 30.4.2008, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


********
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 2.5.2005
Где: Москва

Репутация: 3
Всего: 5



Цитата(lando1 @  30.4.2008,  10:02 Найти цитируемый пост)
"переопределить" можно и не virtual метод - с использованием new. В чем тут отличие от переопределения virtual метода

Метод new - это по сути замещение родительского метода. А отличие в том, что если вы свой дочерний объект с замещенным с помощью слова new методом приведёте к указателю родительского класса и у указателя вызовете метод, то вызовется его родительская реализация (которая в классе-родителе) в отличие от переопределенного с помощью override метода, когда в таком же случае вызывается реализация дочернего класса


--------------------
Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак"
PM MAIL   Вверх
Rififi
Дата 30.4.2008, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: нет
Всего: 36



Цитата(EuGenius_Krivbass @  23.10.2007,  17:10 Найти цитируемый пост)
В чем смысл полиморфизма и виртуальных функций?

в применении единообразных действий к разнородным сущностям.
PM MAIL   Вверх
sobik
Дата 30.4.2008, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 21.3.2008
Где: Киев, Украина.

Репутация: 1
Всего: 1



Фишка виртаульных функций(ну и полиморфизма заодно) - в позднем связывнии. То есть, Вы не знаете, что придет юзеру в голову ввести, нету четких входных данных. И именно для этого пишеться  куча виртуальных функций - что бы для разных данный применять "одинаковые"(точнее подобные) алгоритмы. Очень наглядный пример показал a_n_d_y, для разных геометрических тел и фигур - одинаковые функции, которые отличаються только формулой подсчета(в его примере,правда, больше ничего нету smile )


Это сообщение отредактировал(а) sobik - 30.4.2008, 13:15
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0564 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.