Динамическое связывание в C++

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

body {
  display: flex;
  flex-direction: column;
  min-height: 100vh; /* For flex-grow for .content to stretch page height. */
  margin: 0;
}

.content {
  display: flex;
  flex-grow: 1;
}

main {
  flex-grow: 1;
}

/* Demo styles */
header,
footer {
  background-color: whitesmoke;
}

aside {
  background-color: cornsilk;
}

main {
  background-color: aliceblue;
}
<header>Header</header>
<div class="content">
  <aside class="left-sidebar">
    Left Aside
  </aside>
  <main>
    Main
  </main>
  <aside class="right-sidebar">
    Right Aside
  </aside>
</div>
<footer>Footer</footer>

5
задан George Stocker 10 April 2009 в 13:13
поделиться

5 ответов

Ответы

  1. Нет. Это гораздо ближе к динамической диспетчеризации, чем динамическое связывание. Динамическое связывание относится к способу, которым метод с именем связывается во время выполнения. Здесь нет имени.
  2. Да. Если методы виртуальные, то это определение динамического связывания. Имя известно во время компиляции, но вызываемый метод не может быть определен без знания типа объекта среды выполнения
  3. Я не уверен, что вы имеете в виду здесь. Динамическое связывание - более идиоматический термин.
6
ответ дан 13 December 2019 в 19:36
поделиться

Я бы назвал оба эти варианта использования динамического связывания. В C ++ язык предоставляет вам механизм, так что вам не нужно катать свой собственный, как вы делаете в C.

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

2
ответ дан 13 December 2019 в 19:36
поделиться

Вы путаете концепцию динамического связывания с реализацией. Динамическое связывание, то есть выбор метода для вызова на основе типа принимающего объекта, может быть реализовано с использованием некоторой формы динамической диспетчеризации, например your (1), но мы обычно определяем имя, чтобы ссылаться только на ситуацию (2).

1
ответ дан 13 December 2019 в 19:36
поделиться

Вы пытались написать код на языке Си? Какой компилятор вы использовали для этого? Вы не можете иметь две функции с одинаковым именем на языке C.

1
ответ дан 13 December 2019 в 19:36
поделиться

Динамическое связывание - это привязка интерфейса к его реализации во время выполнения - любая ситуация, когда программа автоматически решает, какой код вызвать как реализацию интерфейса. Таким образом, вообще говоря, 1) и 2) являются динамическим связыванием, но термин обычно используется только для 2).

Связывание во время соединения (раннее связывание) является противоположностью динамического связывания (позднее связывание). При связывании во время компиляции компилятор / компоновщик точно знает, какой код вызывать, и создает прямой вызов этого кода. В динамическом связывании компилятор / компоновщик этого не знает - точная реализация определяется во время выполнения.

1
ответ дан 13 December 2019 в 19:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: