菠萝の生活

博客

画画

旅行

工具

资料

C++静态绑定和动态绑定

在C++中,绑定是指将函数调用与函数定义相匹配的过程。

静态绑定:

   是指在编译时将函数调用与函数定义相匹配的过程。这种绑定是通过函数名称和参数类型来完成的。在静态绑定中,程序员可以在调用函数时明确地指定所需的函数版本。

   优点是速度快,因为它在编译时完成,而不需要在运行时进行额外的处理。动态绑定的优点是灵活性高,因为它可以根据对象的实际类型来选择正确的函数版本。

动态绑定:

   是指在运行时将函数调用与函数定义相匹配的过程。这种绑定是通过虚函数来完成的。在动态绑定中,程序员可以在运行时根据对象的实际类型来调用正确的函数版本。

   在C++中,如果一个函数被声明为虚函数,那么它就可以被动态绑定。在调用虚函数时,程序会根据对象的实际类型选择正确的函数版本。如果在调用虚函数时使用了基类指针或引用,那么程序会根据指针或引用所指向的对象的实际类型选择正确的函数版本。

示例:

#include <iostream>

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

class Derived : public Base {
public:
    void foo() {
        std::cout << "Derived::foo() is called" << std::endl;
    }
};

int main() {
    Base* ptr = new Derived();
    ptr->foo();  // 动态绑定,输出 "Derived::foo() is called"
    delete ptr;
    
    Derived obj;
    obj.foo();  // 静态绑定,输出 "Derived::foo() is called"
    return 0;
}