Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.07.2012, 17:57   #11
blacktener
Пользователь
 
Регистрация: 15.12.2010
Сообщений: 78
По умолчанию

вот еще пример с утками который немного лучше показывает преимущества полиморфизма.
В данном случае есть куча разных уток, которые мы заставляем крякать вместе.

Код:
#include <iostream>

using namespace std;

//просто утка
class Duck {
public:
    virtual void quack() {}      
};

//особенная утка
class MallardDuck : public Duck {
public:
    virtual void quack() {
        cout << "quack quack" << endl;    
    }      
};

//русская утка
class RussianDuck : public Duck {
public:
    virtual void quack() {
        cout << "QUACK!!!" << endl;    
    }    
};

int main() {
    const int n = 10; //сколько уток
    Duck *ducks[n]; //создаем массив уток
    
    //создаем самих уток
    for (int i=0; i<5; i++) ducks[i] = new MallardDuck(); 
    for (int i=5; i<n; i++) ducks[i] = new RussianDuck();
    
    //а теперь самое главное
    for (int i=0; i<n; i++) {
        ducks[i]->quack();  //для всех уток вызывается один и тот же метод, 
                            //но у разных уток он работает по разному 
    }
    
    system("PAUSE");
    return 0;    
}
blacktener вне форума Ответить с цитированием
Старый 18.07.2012, 17:58   #12
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Smitt&Wesson

В C++, просто понятие процедуры не определено, но существует (как ни странно).

Совершенно согласен с Вами, это более чем странно! Особенно учитывая тот факт, что составители Стандарта C++ тоже про это не в курсе
В $8.3.5 они распинаются про обычные функции, в $9.3 про функции - члены классов, в $11.4 - про друзей. И нигде ни слова про процедуры.

Вывод только один. У Вас - продвинутая китайская версия C++. В ней, очевидно, еслит процедуры, в том числе и "полиморфическая" oO

используя сигналы любой операционной системы

стопудово, китайская.
Rififi вне форума Ответить с цитированием
Старый 18.07.2012, 18:01   #13
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Имеет, имеет. Полиморфизм, возможность использовать виртуальные функции, используя сигналы любой операционной системы при помощи указателей.
это не фича ООП, а фича компиляторов по сути, что они умеет выбирать функцию по прототипу.
поверьте, перегрузка немного иное.
хотя это полиморфность, но это не ООП.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.07.2012, 18:04   #14
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Rififi Посмотреть сообщение
Smitt&Wesson

В C++, просто понятие процедуры не определено, но существует (как ни странно).

Совершенно согласен с Вами, это более чем странно! Особенно учитывая тот факт, что составители Стандарта C++ тоже про это не в курсе
В $8.3.5 они распинаются про обычные функции, в $9.3 про функции - члены классов, в $11.4 - про друзей. И нигде ни слова про процедуры.

Вывод только один. У Вас - продвинутая китайская версия C++. В ней, очевидно, еслит процедуры, в том числе и "полиморфическая" oO

используя сигналы любой операционной системы

стопудово, китайская.
У меня нет версий. Просто Вы привыкли к таким определениям, а у меня это осталось со-времён работы с Turbo Pascal. И это не мешает мне писать программы на C++.
Странно, не правда-ли?
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 18.07.2012, 18:05   #15
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Smitt&Wesson

Полиморфизм, возможность использовать виртуальные функции

А теперь - правильный ответ :lol:

виртуальные функции никак не связаны с понятием "полиморфизм".
Например такие языка как Java, C# не имеют никаких виртуальных функций, и тем не менее возможности полиморфизма в них доступны.

Просто Вы привыкли к таким определениям

А теперь - правильный ответ :lol:

Я привык к стандарту C++
Rififi вне форума Ответить с цитированием
Старый 18.07.2012, 18:11   #16
blacktener
Пользователь
 
Регистрация: 15.12.2010
Сообщений: 78
По умолчанию

Цитата:
Сообщение от Rififi Посмотреть сообщение
Smitt&Wesson

Полиморфизм, возможность использовать виртуальные функции

А теперь - правильный ответ :lol:

виртуальные функции никак не связаны с понятием "полиморфизм".
Например такие языка как Java, C# не имеют никаких виртуальных функций, и тем не менее возможности полиморфизма в них доступны.
Во всем остальном с тобой согласен полностью но тут немного не соглашусь. В жабе для всех методов применяется позднее связывание, то есть по сути они ВСЕ являются виртуальными.
А насчет того что виртуальные функции не связаны с полиморфизмом...
а с чем они тогда связаны как не с полиморфизмом?

Последний раз редактировалось blacktener; 18.07.2012 в 18:14. Причина: не ранее, а позднее
blacktener вне форума Ответить с цитированием
Старый 18.07.2012, 18:16   #17
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Просто Вы привыкли к таким определениям, а у меня это осталось со-времён работы с Turbo Pascal. И это не мешает мне писать программы на C++.
в том и дело что паскаль вносит путаницу, и то и то есть подпрограмма.
одно возвращает значение, второе нет.
в С/С++ нет отдельных понятий(а тем более ключевых слов отдельных)
Цитата:
C# не имеют никаких виртуальных функций
шарп имеет.
Цитата:
А насчет того что виртуальные функции не связаны с полиморфизмом...
а с чем они тогда связаны как не с полиморфизмом?
ну есть указатели на функции.
виртуальные функции просто более легкий способ применения полиморфизма, они связаны, но они не основа.
Цитата:
В жабе для всех методов применяется позднее связывание, то есть по сути они ВСЕ являются виртуальными.
да, но отдельно они не существуют.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.07.2012, 18:18   #18
blacktener
Пользователь
 
Регистрация: 15.12.2010
Сообщений: 78
По умолчанию

похоже тема скоро перерастет в тройной срач)))
blacktener вне форума Ответить с цитированием
Старый 18.07.2012, 18:24   #19
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
в том и дело что паскаль вносит путаницу, и то и то есть подпрограмма.
Путаницу внёс не Pascal, а Assembler. Делов том, что стали путать "машинные коды" и мнемоническое их обозначение. Потом пошло-поехало. Каждый разработчик приблизительно-похожего языка, стал называть чёрте-что, чёрте-чем. Только окончательно всех запутывая.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 18.07.2012, 18:26   #20
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

blacktener

В жабе для всех методов применяется ранее связывание, то есть по сути они ВСЕ являются виртуальными.

А это уже особенности реализации.
Хотя насчет C# пожалуй действительно неправ. Там с ключевым словом "virtual" есть свои заморочки
Rififi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Полиморфизм Anubys Помощь студентам 1 26.12.2011 20:42
Полиморфизм Zorgan Visual C++ 22 29.08.2011 12:23
Полиморфизм MasterSporta Общие вопросы C/C++ 3 10.04.2011 23:46
полиморфизм slayerblya Общие вопросы C/C++ 1 27.02.2011 01:43
Полиморфизм mister2010 Общие вопросы C/C++ 30 24.05.2010 01:07