2013-06-22 29 views
0

动态加载和动态绑定在C++中的主要区别是什么?动态加载和动态绑定的区别

为什么动态加载被称为静态?

+0

你确定你选择正确的词吗?动态加载和动态绑定实际上是一回事。但是,静态绑定和动态绑定是有区别的。 – Muepe

+0

ya.i在我的书上看到这个词 – MBMJ

+0

http://stackoverflow.com/questions/6866432/what-are-similarities-and-differences-between-dynamic-loading-and-late-binding –

回答

3

这个问题有几个方面。如果我们谈论关于动态绑定的对象。让我们考虑以下情况

class Base { 
public: 
    virtual void method() { std::cout << "Base::method" << std::endl; } 
}; 

class Derived : public Base { 
public: 
    virtual void method() { std::cout << "Derived::method" << std::endl; } 
}; 

// .... 

void testMethod(Base* pBase) { 
    pBase->method(); 
} 

函数调用不是在编译时还不知道,这可能是基地::方法或派生::根据运行时类型PBASE的方法。这就是为什么当呼叫实际即将发生时,它的被称为dyanmic绑定(或后期绑定)的实际方法调用。

另一方面,我们有动态和静态加载。这与加载库有关。一种可能性是创建一个静态库 - 一个带有目标代码的文件 - 在编译器编译并链接它时链接到您的程序。它在编译后不能被修改,因为它的名字来自静态绑定到你的程序。

如果您要进行动态加载,而不是在编译时将代码添加到程序中,请在运行时加载它。不同的操作系统提供了各种方法来实现。对于Windows用户DLL文件不应该是未知的东西。它们包含目标代码,当程序请求代码时,它会加载提供代码并执行该代码的DLL。这使您可以添加不同版本的DLL,而无需重新编译程序(只要签名和一般行为保持不变) - 我们可以说它的动态。

+0

好的解释谢谢兄弟! ! –