С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 63, средняя оценка - 4.81
rar14
28 / 22 / 1
Регистрация: 14.04.2009
Сообщений: 448
#1

Полиморфизм своими словами - C++

02.06.2009, 14:04. Просмотров 8366. Ответов 36
Метки нет (Все метки)

Дайте определения полиморфизма своими слова. А так же примерчик, который ярко выражает полиморфизм.
Спасибо.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.06.2009, 14:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Полиморфизм своими словами (C++):

С++ и полиморфизм - C++
Здравствуйте. Ответьте пожалуйста на несколько вопросов: 1. Что такое абстрактная функция простыми словами? 2. Что такое...

Полиморфизм - C++
Всем доброго времени суток.Сразу к делу. Если описывать с помощью полиморфизма подклассы и потом динамично их создавать ,то можно вызывать...

Полиморфизм - C++
Хай :senor: class MyPrint//производный класс { public: MyPrint() { cout << "Constructor MyPrint" << endl; } virtual...

Полиморфизм - C++
В одной дешевой книжке про него пишут а в другой дорогой нет и понять я почему то немогу точно как и для чего он нужен

Полиморфизм - C++
Я хотел реализовать множество, используя множественное наследование, но когда написал template <class T> class set { protected: ...

Полиморфизм - C++
Прочитал в Википедии что такое полиморфизм: Кратко смысл полиморфизма можно выразить фразой: «Один интерфейс, множество реализаций». ...

36
Sergei
1438 / 705 / 41
Регистрация: 22.04.2008
Сообщений: 1,610
02.06.2009, 14:13 #2
Полиморфизм это когда наследуемые классы или просто различные классы имеют
одинаковые методы но с различной реализацией
0
Evg
Эксперт CАвтор FAQ
18377 / 6424 / 441
Регистрация: 30.03.2009
Сообщений: 17,825
Записей в блоге: 28
02.06.2009, 14:51 #3
И не обязательно классы, можно и просто функции.

C
1
2
void func (int x) { }
void func (float x) { }
0
rar14
28 / 22 / 1
Регистрация: 14.04.2009
Сообщений: 448
02.06.2009, 14:54  [ТС] #4
То есть полиморфизм в общем виде - это перегрузка функций (методов)?
0
GalaX
698 / 570 / 21
Регистрация: 18.11.2008
Сообщений: 2,144
02.06.2009, 15:08 #5
Цитата Сообщение от rar14 Посмотреть сообщение
То есть полиморфизм в общем виде - это перегрузка функций (методов)?
примерно, только перегрузка - это когда класс имеет два (и более) метода с одинаковыми именами, а полиморфизм - в каждом классе свой метод, но называется также.. например:
PHP
1
2
3
4
5
6
class самолет {
  function move();
}
class танк {
  function move();
}
два класса с одинаковыми методами (названиями), но у этих методов разная реализация - в классе "самолет" этот метод реализует движение по воздуху, а в классе "танк" в методе с таким же названием реализуется движение по земле
0
rar14
28 / 22 / 1
Регистрация: 14.04.2009
Сообщений: 448
02.06.2009, 15:12  [ТС] #6
Вроде о полиморфизме можно говорить, когда есть наследование? У вас там нет наследования.
И еще. Методы обязательно должны быть объявлены с спецификатором virtual для того, чтобы быть полиморфными?
0
GalaX
698 / 570 / 21
Регистрация: 18.11.2008
Сообщений: 2,144
02.06.2009, 15:40 #7
Цитата Сообщение от rar14 Посмотреть сообщение
Вроде о полиморфизме можно говорить, когда есть наследование? У вас там нет наследования.
не обязательно наследование применять, но если погонять мыслЮ, то можно увидеть че такое полиморфизм (с наследованием):
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class техника {
    function go() {
        $this->move();
    }
}
class самолет extends техника {
    function move() {
        print 'Летим на самолете';
    }
}
class танк extends техника {
    function move() {
        print 'Катимся на танке';
    }
}
$plane = new самолет;
$tank = new танк;
 
$plane->go(); // Выведет "Летим на самолете"
$tank->go(); // думаю не трудно догадаться что выведет тут
в Cpp у меня мозг не форцает, поэтому написал на php
0
Rififi
2360 / 1053 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
02.06.2009, 15:50 #8
rar14,
Дайте определения полиморфизма своими слова
единообразная работа с разными по своей природе сущностями.
0
Evg
Эксперт CАвтор FAQ
18377 / 6424 / 441
Регистрация: 30.03.2009
Сообщений: 17,825
Записей в блоге: 28
02.06.2009, 16:02 #9
Цитата Сообщение от Evg Посмотреть сообщение
И не обязательно классы, можно и просто функции.

C
1
2
void func (int x) { }
void func (float x) { }
Значит я ошибся в терминологии. А то, что написал я, как называется? Перегрузка функций?
0
Sergei
1438 / 705 / 41
Регистрация: 22.04.2008
Сообщений: 1,610
02.06.2009, 16:23 #10
Evg ты ошибся это перегрузка функции а не полиморфизм
Полиморфизм относится к ООП а не к функциям в отдельности

Добавлено через 3 минуты 31 секунду
Полиморфи́зм (в языках программирования) — взаимозаменяемость объектов с одинаковым интерфейсом.

Язык программирования поддерживает полиморфизм, если классы с одинаковой спецификацией могут иметь различную реализацию — например, реализация класса может быть изменена в процессе наследования [1].

Кратко смысл полиморфизма можно выразить фразой: «Один интерфейс, множество реализаций».

Полиморфизм — один из четырёх важнейших механизмов объектно-ориентированного программирования (наряду с абстракцией, инкапсуляцией и наследованием).

Полиморфизм позволяет писать более абстрактные программы и повысить коэффициент повторного использования кода. Общие свойства объектов объединяются в систему, которую могут называть по-разному — интерфейс, класс. Общность имеет внешнее и внутреннее выражение. Внешне общность проявляется как одинаковый набор методов с одинаковыми именами и сигнатурами (типами аргументов и результатов). Внутренняя общность есть одинаковая функциональность методов. Её можно описать интуитивно или выразить в виде строгих законов, правил, которым должны подчиняться методы. Возможность приписывать разную функциональность одному методу (функции, операции) называется перегрузкой метода (функций, операций).
1
GalaX
698 / 570 / 21
Регистрация: 18.11.2008
Сообщений: 2,144
02.06.2009, 16:24 #11
Цитата Сообщение от Sergei Посмотреть сообщение
Полиморфизм относится к ООП а не к функциям в отдельности
Evg вот в этом ошибся, а насчет того что перегрузка функций относится к полиморфизму в этом нет никакой ошибки, т.к. перегрузка функций это один из способов реализации полиморфизма
1
Sergei
1438 / 705 / 41
Регистрация: 22.04.2008
Сообщений: 1,610
02.06.2009, 16:28 #12
Мой Вам простой совет чтобы понять что такое полиморфизм и вообщее ООП
напишите какую нибудь программу например работа с 2-х мерными геометрическими фигурами и только тогда вы сможете понять что такое ООП и наследование полиморфизм и все что с этим связано иначе по теории программирование трудно изучить надо писать программы и как можно больше.

Добавлено через 1 минуту 39 секунд
Evg вот в этом ошибся, а насчет того что перегрузка функций относится к полиморфизму в этом нет никакой ошибки, т.к. перегрузка функций это один из способов реализации полиморфизма
Тогда надо уточнить какие еще есть способы полиморфизма?
0
Evg
Эксперт CАвтор FAQ
18377 / 6424 / 441
Регистрация: 30.03.2009
Сообщений: 17,825
Записей в блоге: 28
02.06.2009, 16:44 #13
Цитата Сообщение от GаlаX Посмотреть сообщение
Evg вот в этом ошибся, а насчет того что перегрузка функций относится к полиморфизму в этом нет никакой ошибки, т.к. перегрузка функций это один из способов реализации полиморфизма
Если термином полиморфизм и вправду называют то, что написал Sergei, то перегрузка функций к полиморфизму не относится, ибо при перегрузке у тебя может и количество праметров изменяться. Т.е. это противоречит

Кратко смысл полиморфизма можно выразить фразой: «Один интерфейс, множество реализаций».
0
GalaX
698 / 570 / 21
Регистрация: 18.11.2008
Сообщений: 2,144
02.06.2009, 18:57 #14
Цитата Сообщение от Evg Посмотреть сообщение
...то перегрузка функций к полиморфизму не относится, ибо при перегрузке у тебя может и количество праметров изменяться...
в том то и суть что кол-во/тип параметров меняется, а название метода то же самое остается , думаю поэтому перегрузку к полиморфизму и относят

Цитата Сообщение от Sergei Посмотреть сообщение
Тогда надо уточнить какие еще есть способы полиморфизма?
я вроде больше не слышал про другие способы, но и утверждать что других способов НЕТ небуду
но самое главное запомнить фразу: "Один интерфейс, множество реализаций" - на этом полиморфизм и строится
0
Evg
Эксперт CАвтор FAQ
18377 / 6424 / 441
Регистрация: 30.03.2009
Сообщений: 17,825
Записей в блоге: 28
02.06.2009, 20:28 #15
Цитата Сообщение от GаlаX Посмотреть сообщение
в том то и суть что кол-во/тип параметров меняется, а название метода то же самое остается
Вот в том-то и дело, что МЕТОДА, т.е. часть реализации класса, а не висячая в воздухе процедура. Т.е. у тебя есть РАЗНЫЕ КЛАССЫ, но эти классы предоставляют один и тот же метод с одним и тем же интерфейсом

Цитата Сообщение от GаlаX Посмотреть сообщение
думаю поэтому перегрузку к полиморфизму и относят
В терминологии, теории, философии я не силён. Просто тот механизм, по которому работают виртуальные методы (фактически каждый класс выполняет собственную реализацию) тот механизм, когда функция вызывается с одним и тем же именем, но разными параметрами - это две принципиально разные вещи. Вторая вещь - это синтаксис и не более того
0
02.06.2009, 20:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2009, 20:28
Привет! Вот еще темы с ответами:

Полиморфизм - C++
Здравствуйте :) Я пытался читать про полиморфизм. Читал-читал, но не очень дошло. Понял, что можно переопределить виртуальную функцию...

Полиморфизм - C++
Сколько я не читал книг и уроков по С++-программированию, я так и не смог понять что такое полиморфизм. Можно ли как-то просто и...

Полиморфизм в с++ - C++
Вообщем я делал программу,изначально в ней было реализовано наследование.Затем дали задание реализовать полиморфзим для функции Scale для...

Полиморфизм - C++
не могу разобраться с полиморфизмом((( Вот как мне вычислить трапеции. У нее ведь три параметра, а не два как у прямоугольника???? ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.