Bootstrap

c++动态绑定和静态绑定

在C++中,动态绑定(也称为运行时多态)和静态绑定(也称为编译时多态)是面向对象编程中的重要概念,用于处理多态性。

1. 静态绑定(编译时多态)

  • 在编译时,编译器就能够确定使用哪个函数。这通常发生在基类和派生类之间的函数调用。
  • 在静态绑定中,函数调用的解析是根据引用或指针的类型进行的,而不是运行时对象的类型。
  • 静态绑定是效率更高的一种方式,因为它在编译时就确定了函数的调用。
#include <iostream>

class Base {
public:
    void display() {
        std::cout << "Display from Base" << std::endl;
    }
};

class Derived : public Base {
public:
    void display() {
        std::cout << "Display from Derived" << std::endl;
    }
};

int main() {
    Base baseObj;
    Derived derivedObj;

    Base* ptr = &derivedObj; // 静态绑定

    ptr->display(); // 输出 "Display from Base",因为使用了静态绑定
    return 0;
}

​​​​​​​2. 动态绑定(运行时多态)

  • 在运行时,根据对象的实际类型来确定调用哪个函数。通常通过虚函数实现。
  • 动态绑定通过虚函数实现,这意味着在基类中声明一个函数为虚函数,并在派生类中重写该函数。
  • 当通过基类指针或引用调用虚函数时,根据对象的实际类型来确定使用哪个函数。

#include <iostream>

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

class Derived : public Base {
public:
    void display() {
        std::cout << "Display from Derived" << std::endl;
    }
};

int main() {
    Derived derivedObj;
    Base* ptr = &derivedObj; // 动态绑定
    ptr->display(); // 输出 "Display from Derived",因为使用了动态绑定
    return 0;
}

;