Понимание динамического связывания - PullRequest
3 голосов
/ 03 ноября 2008

Я понимаю, как работает реализация динамического связывания, а также различие между статическим и динамическим связыванием. У меня просто возникают проблемы с определением динамического связывания. По сути, это тип привязки во время выполнения.

Ответы [ 2 ]

3 голосов
/ 03 ноября 2008

По сути, динамическое связывание означает, что адрес для вызова функции не жестко закодирован в сегмент кода вашей программы при переводе на ассемблер, а вместо этого получен из другого места, то есть из переменных стека, поиска в массиве и т. Д.

На более высоком уровне, если у вас есть строка кода:

foo(bar) //Calls a funciton

Если во время компиляции можно точно знать, какую функцию он будет вызывать, это статическое связывание. Если foo может означать несколько функций в зависимости от того, что невозможно узнать во время компиляции, это динамическое связывание.

1 голос
/ 03 ноября 2008

Я понимаю, что это проявляется в полиморфизме. Обычно при создании нескольких классов, производных от базового класса. Если каждый из производных классов содержит функцию, которую использует каждый. Базовый класс можно использовать для выполнения функции производного класса, и он будет правильно вызывать правильную функцию.

Например:

class Animal
{
void talk();
}

class Dog extends Animal
{
public void talk() { System.out.println("woof"); }
}

class Cat extends Animal
{
public void talk() { System.out.println("meow"); }
}

....
Animal zoo[2];
zoo[0] = new Dog();
zoo[1] = new Cat();

for(Animal animalToggle: zoo)
{
animalToggle.talk();
}

напечатает: гав мяу

Моя интерпретация, надеюсь, поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...