ZWYHB
Участник
Offline
|
|
« : 07-03-2010 13:31 » |
|
Никак не могу понять разницу с полиморфизмом привидите пример на C++ или java
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #1 : 07-03-2010 14:18 » |
|
а разницу с ЧЕМ ? )
|
|
|
Записан
|
|
|
|
x77
Команда клуба
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #2 : 07-03-2010 14:23 » |
|
Алексей1153++, видимо, раздницу между поздним связыванием и полиморфизмом я, сказать честно, её тоже не очень понимаю
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #3 : 07-03-2010 14:24 » |
|
эээ.. Вад, конечно, щас всё расскажет, но, по-моему, эти понятия вообще не сравниваются - связывание это же к длл относится, а полиморфизм - к средствам языка
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #4 : 07-03-2010 14:29 » |
|
Позднее связывание, в общем смысле, это и есть привычный, динамический полиморфизм - механизм наследования и виртуальных функций. Поэтому вопрос непонятен Есть, конечно, ещё полиморфизм статический, но когда говорят о полиморфизме - обычно всё-таки подразумеваются механизмы вроде виртуальных функций
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #5 : 07-03-2010 14:32 » |
|
*значит, я немного промахнулся ))*
но вообще, нужны примеры от автора, где что непонятно
|
|
|
Записан
|
|
|
|
x77
Команда клуба
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #6 : 07-03-2010 15:13 » |
|
хитрый какой, автор сам хочет примеры.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #7 : 07-03-2010 15:52 » |
|
тогда получается замкнутый круг )) Вот ежели бы автор встретил реальную проблему и о ней спросил )
|
|
|
Записан
|
|
|
|
x77
Команда клуба
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #8 : 07-03-2010 16:08 » |
|
там всё очень просто, на самом деле. и разница только в адресации. при раннем связывании (т.е. на этапе компиляции) адрес функции уже известен. а при позднем связывании адрес, по которому живёт функция определяется в рантайме, для чего при создании объекта (в конструкторе) инициализируется т.н. VMT - виртуальная таблица методов. собственно, первые четыре байта любого объекта и есть ссылка на VMT.
т.е., при раннем (статическом) связывании компилятор определяет адрес функции, а при позднем (динамическом) - VMT, в котором содержаться адреса всех функций. и какая функция реально будет выполнятся - зависит от класса объекта, осуществляющего вызов. почему полиморфизм и невозможен при раннем связывании.
|
|
|
Записан
|
|
|
|
ZWYHB
Участник
Offline
|
|
« Ответ #9 : 07-03-2010 16:10 » |
|
ээ.. Ну просто привидите пример реализации позднего связывания)
|
|
|
Записан
|
|
|
|
x77
Команда клуба
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #10 : 07-03-2010 16:13 » |
|
я си не знаю но: раннее связывание - это любая регулярная процедура или функция позднее связвание - это только методы класса. любого. подозреваю, что в Джаве раннего связывания нет вообще.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #11 : 07-03-2010 16:14 » |
|
class A {
protected: virtual int F() { } };
class B:public A { int F() { } };
B b; A* a=&b;
a->F();//вызовется b.F()
|
|
|
Записан
|
|
|
|
x77
Команда клуба
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #12 : 07-03-2010 16:18 » |
|
Лёш, вот это - class A {
protected: virtual int F() { } }; - уже позднее связывание, независимо от существования наследников. любой метод класса связывается только через VMT.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #13 : 07-03-2010 16:21 » |
|
дык, кто ж спорит Просили пример - был пример А в Дельфи/Паскале есть виртуальные функции ?
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #14 : 07-03-2010 17:17 » |
|
Алексей1153++, а как же.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
ZWYHB
Участник
Offline
|
|
« Ответ #15 : 07-03-2010 18:27 » |
|
Теперь понятно Всем спасибо!
|
|
|
Записан
|
|
|
|
|