C ++中的动态绑定

时间:2009-04-10 13:06:35

标签: c++ dynamic-binding

我需要对C ++中的动态绑定做一些澄清。我对以下内容感到困惑:

  1. 在C语言中,您可以拥有一系列函数指针&分配相同签名的不同功能&根据索引调用它们;这是动态绑定吗?

  2. 在C ++中,您可以拥有一个基类指针数组,但是您可以通过将派生类对象地址分配给指针的基类数组来调用派生类的不同函数。通过使用虚函数,这是动态绑定吗?

  3. 哪个字词是正确的 - Dynamic bindingLink-Time Binding

5 个答案:

答案 0 :(得分:6)

答案

  1. 否。这比动态绑定更接近动态调度。动态绑定是指在运行时绑定命名的方法的方式。这里没有名字。
  2. 是。如果方法是虚拟的,那么这就是动态绑定的定义。该名称在编译时已知,但在不知道运行时对象类型的情况下无法确定调用的方法
  3. 我不确定你的意思。动态绑定是更惯用的术语。

答案 1 :(得分:2)

我将这两种用法称为动态绑定。在C ++中,该语言为您提供了机制,因此您不必像在C中那样自行滚动。

(我曾经使用过一个应用程序,其中每个主要对象都附带了struct,其字段是函数指针。该结构的目的是允许应用程序实现运行时动态绑定 - 也就是说,根据对象的状态在运行时更改对象的指定函数。据我所知,这个“特性”从未被利用过。)

答案 2 :(得分:1)

动态绑定是运行时绑定到其实现的接口 - 当程序自动决定调用哪个代码作为接口实现时的任何情况。所以一般来说1)和2)都是动态绑定,但这个术语通常只用于2)。

链接时绑定(又名早期绑定)与动态绑定(又称后期绑定)相反。在链接时绑定中,编译器/链接器确切地知道要调用哪些代码并且直接调用该代码。在动态绑定中,编译器/链接器不知道 - 确切的实现是在运行时确定的。

答案 3 :(得分:1)

您是否尝试过使用C语言编写代码?您使用哪个编译器?您不能在C语言中使用两个具有相同名称的函数。

答案 4 :(得分:1)

您将动态绑定的概念与实现混淆。动态绑定,即根据接收对象的类型选择调用哪种方法,可以使用某种形式的动态调度来实现,即你的(1),但我们通常将名称定义为仅引用情境(2)。