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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2010, 18:27   #21
mister2010
Пользователь
 
Регистрация: 03.03.2010
Сообщений: 18
По умолчанию

Код:
Кратко смысл полиморфизма можно выразить фразой: «Один интерфейс, множество реализаций».
Смотрите 1 интерфейс, интерфейс- это методы и поля описанные внутри класса, как паблик.
А множество реализаций,это когда я создам экземпляр этого класса и через него обращусь к этим методам и полям?
Получается что я могу создавать разные объекты этого класса и получать доступ к методам и полям описанных в Этом классе.
Полиморфизм - это когда я могу создавать много разных объектов этого класса, и получать доступ к методам и полям класса, применяя эти методы и поля в разных целях в коде ?
mister2010 вне форума Ответить с цитированием
Старый 23.05.2010, 18:28   #22
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

на примере близком к вашему(но он с Делфи, но сути не меняет)
есть абстрактный класс TStream(поток, аля fstream) далее от него идут классы TFileStream(работа с файлом), TMemoryStream(с памятью), TSocketStream(с сетью)
в итоге у нас в функция(пишу сишно уже)
Код:
void* ReadData(TStream& st,int count)
{
     void* t=malloc(count);
     st.Read(t,count);//читаем count байт из потока, но что это за поток, функция не знает
     return t;
}
можно реализовать поток по типу cin+cout для консоли, но пользоватся можно все так же...мы знаем что у нас поток...и все.
а откуда он берет данные функцию не волнует.

надеюсь понятно?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.05.2010, 18:45   #23
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от mister2010 Посмотреть сообщение
интерфейс- это методы и поля описанные внутри класса, как паблик.
Нет. Интерфейс - это правила взаимодействия. Действительно, в классах оно выражается в виде публичных свойств и публичных методов, эти свойства и методы предоставляют интерфейс для работы с объектом. Как они изменяют объект - деталь реализации конкретного класса. Класса, а не объекта класса. Концепция полиморфизма в C++ позволяет абстрагироваться от такой детали реализации как тип объекта, главное, дабы тип этого объекта предоставлял некий определённый интерфейс. То есть например существует тип(класс) Рисунок, у него есть метод вывести_на_экран(), от рисунка есть производные типы Домик, Солнышко, Травка, каждый из них реализует метод вывести_на_экран() по-своему(Домик отрисовывает домик, Солнышко рисует солнце и т.д.). Мы можем написать функцию, которая выводит Рисунок на экран, но мы не знаем заранее, какой из рисунков нужно нарисовать.
Код:
void нарисовать(Рисунок* рис) {
    рис->вывести_на_экран();
}

int main() {
    Домик    *дом    = new Домик;
    Солнышко *солнце = new Солнышко;
    Травка   *трава  = new Травка;

    нарисовать(дом);    // нарисует домик
    нарисовать(солнце); // нарисует солнце
    нарисовать(трава);  // нарисует травку
}
Может с русскими названиями будет понятней?

Последний раз редактировалось netrino; 23.05.2010 в 18:48.
netrino вне форума Ответить с цитированием
Старый 23.05.2010, 19:24   #24
mister2010
Пользователь
 
Регистрация: 03.03.2010
Сообщений: 18
По умолчанию

Полиморфизм - это использование методов классов не зная реализации методов?
mister2010 вне форума Ответить с цитированием
Старый 23.05.2010, 19:29   #25
Serjuk
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 136
По умолчанию

Ребят,а чем отличается полиморфизм от перегрузки функций?
Serjuk вне форума Ответить с цитированием
Старый 23.05.2010, 19:30   #26
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от mister2010 Посмотреть сообщение
Полиморфизм - это использование методов классов не зная реализации методов?
И опять мимо. Обычно мы и так не знаем реализации методов. Полиморфизм - использование методов класса, не зная с каким конкретно классом мы имеем дело. Мы знаем только то, что он предоставляет нам некий интерфейс
netrino вне форума Ответить с цитированием
Старый 23.05.2010, 19:32   #27
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Serjuk Посмотреть сообщение
Ребят,а чем отличается полиморфизм от перегрузки функций?
Перегруженные функции, это тоже вид полиморфизма. Такие функции также называются полиморфными
netrino вне форума Ответить с цитированием
Старый 23.05.2010, 19:34   #28
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Полиморфизм - это использование методов классов не зная реализации методов?
отсыпь?
------
ИМХО стоит разобраться действительно ли вам нужно знать что это такое и поможет ли это вам в чем-то. Предлагаю вам написать кусочек кода, а мы скажем что вы написали.
rrrFer вне форума Ответить с цитированием
Старый 23.05.2010, 19:34   #29
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Цитата:
Полиморфизм - это использование методов классов не зная реализации методов?
Использование методов классов независимо от реализации методов (и знания об их реализации). А точнее - механизм, позволяющий так делать.
Цитата:
Ребят,а чем отличается полиморфизм от перегрузки функций?
Читайте тему внимательней! В частности, вот этот фрагмент:
Цитата:
в с++ например, бывает статический и динамический полиморфизм. динамический основан на виртуальных функциях, подстановке другого интерфейса (полиморфное поведение в рантайме). статический - на перегрузке функций, шаблонах (полиморфное поведение на этапе компиляции).
P.S. Тема превращается в "У семи нянек дитя без глаза"
А у четырнадцати - без двух
У четырнадцати - тоже слышит не с первого раза. У семидесяти нянек - отсутствуют следующие органы: ...
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же

Последний раз редактировалось Гром; 23.05.2010 в 19:37.
Гром вне форума Ответить с цитированием
Старый 24.05.2010, 00:51   #30
mister2010
Пользователь
 
Регистрация: 03.03.2010
Сообщений: 18
По умолчанию

На основе всех ответов я сформулировал такое, скажите верна ли такая формулировка полиморфизму.
Полиморфизм - это использование методов и полей класса ,через объект класса, при этом не зная какого класса этот объект.
mister2010 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Полиморфизм, наследование и деструкторы alex_triton Общие вопросы C/C++ 1 08.11.2009 17:52
Полиморфизм и выделение (освобождение) памяти Scogan Общие вопросы C/C++ 9 13.04.2009 07:57
Полиморфизм и виртуальные методы Викдон Общие вопросы Delphi 1 02.02.2009 04:40
Полиморфизм. Пример. Scratch Общие вопросы C/C++ 53 28.09.2008 18:46