2015-12-28 6 views
1

У меня был экзамен в колледже по объектно-ориентированному программированию. Один из вопросов касался статической привязки и динамического связывания.Статическое связывание и динамическое связывание без методов

Вопрос был следующим:

Shape s; if(i==1) s = new Point(1,2); else s = new Rectange(10,20); //this is dynamic binding. 

ДА/НЕТ enter image description here это не мой ответ кстати.

Мой учитель сказал, что ответ «нет», потому что это статическая привязка.

Как я знаю, статическая привязка и динамическое связывание случаются только при вызове методов. Я прочитал все вопросы StackOverflow и много сообщений в блоге по этой теме, и единственный ответ, который я могу придумать, заключается в том, что есть динамическое связывание.

Любое объяснение будет оценено.

+1

Вы жестко запрограммировали, что '' 'относится либо к экземпляру' Point', либо к экземпляру 'Rectangle' ... что такое _dynamic_? – Tom

+1

Это только предположение, но, возможно, то, что ваш учитель имел в виду, это то, что возможные типы известны во время компиляции. Невозможно ввести новый, неизвестный тип во время выполнения, как это было бы, если бы вы использовали отражение для создания объекта. – erickson

ответ

3

«привязка» означает, что вы связываете имя с объектом, поэтому здесь происходит переплет.

Это динамическое связывание см the wikipedia article:

Связывание имен, прежде чем программа запускается называется статический (также «рано»); привязки, выполняемые по ходу программы, являются динамическими (также «поздними» или «виртуальными»).

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

Но примером динамической привязки является динамическая отправка, как в вызове виртуального метода C++. Поскольку конкретный тип полиморфного объекта неизвестен до выполнения (в общем), выполняемая функция динамически связана.

Несмотря на то, что размещенный код предопределяет то, что устанавливается s, установив i, что делает эту динамику тем, что методы, называемые s, будут разрешаться во время выполнения.

1

Нет. Это динамическое связывание.

Значение переменной i неизвестно во время компиляции. В зависимости от значения переменной i во время выполнения, Shape был установлен. Как предположил Натан Хьюз, методы, вызванные Shape, разрешаются во время выполнения, что делает его поздним динамическим связыванием.

 Смежные вопросы

  • Нет связанных вопросов^_^