Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Что такое позднее связывание?  (Прочитано 19145 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ZWYHB
Участник

ru
Offline Offline

« : 07-03-2010 13:31 » 

Никак не могу понять разницу с полиморфизмом Здесь была моя ладья...
привидите пример
на C++ или java
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 07-03-2010 14:18 » 

а разницу с ЧЕМ ? )
Записан

x77
Команда клуба

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #2 : 07-03-2010 14:23 » 

Алексей1153++, видимо, раздницу между поздним связыванием и полиморфизмом Улыбаюсь я, сказать честно, её тоже не очень понимаю Улыбаюсь
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 07-03-2010 14:24 » new

эээ.. Вад, конечно, щас всё расскажет, но, по-моему, эти понятия вообще не сравниваются - связывание это же к длл относится, а полиморфизм - к средствам языка
Записан

Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 07-03-2010 14:29 » 

Позднее связывание, в общем смысле, это и есть привычный, динамический полиморфизм - механизм наследования и виртуальных функций. Поэтому вопрос непонятен Улыбаюсь Есть, конечно, ещё полиморфизм статический, но когда говорят о полиморфизме - обычно всё-таки подразумеваются механизмы вроде виртуальных функций Улыбаюсь
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 07-03-2010 14:32 » 

*значит, я немного промахнулся ))*

но вообще, нужны примеры от автора, где что непонятно
Записан

x77
Команда клуба

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #6 : 07-03-2010 15:13 » 

хитрый какой, автор сам хочет примеры.
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #7 : 07-03-2010 15:52 » 

тогда получается замкнутый круг )) Вот ежели бы автор встретил реальную проблему и о ней спросил )
Записан

x77
Команда клуба

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #8 : 07-03-2010 16:08 » 

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

т.е., при раннем (статическом) связывании компилятор определяет адрес функции, а при позднем (динамическом) - VMT, в котором содержаться адреса всех функций. и какая функция реально будет выполнятся - зависит от класса объекта, осуществляющего вызов. почему полиморфизм и невозможен при раннем связывании.
Записан

ZWYHB
Участник

ru
Offline Offline

« Ответ #9 : 07-03-2010 16:10 » 

ээ.. Ну просто привидите пример реализации позднего связывания)
Записан
x77
Команда клуба

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #10 : 07-03-2010 16:13 » 

я си не знаю Улыбаюсь но:

раннее связывание - это любая регулярная процедура или функция
позднее связвание - это только методы класса. любого.

подозреваю, что в Джаве раннего связывания нет вообще.
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline 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
Команда клуба

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #12 : 07-03-2010 16:18 » 

Лёш, вот это -

Код:
class A
{

protected:
    virtual int F()
    {
    }
};

 - уже позднее связывание, независимо от существования наследников. любой метод класса связывается только через VMT.
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #13 : 07-03-2010 16:21 » 

дык, кто ж спорит Улыбаюсь Просили пример - был пример

А в Дельфи/Паскале есть виртуальные функции ?
Записан

Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #14 : 07-03-2010 17:17 » 

Алексей1153++, а как же.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
ZWYHB
Участник

ru
Offline Offline

« Ответ #15 : 07-03-2010 18:27 » 

Теперь понятно
Всем спасибо!
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines