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

在 C++ 中,静态绑定(静态多态)和动态绑定(动态多态)是关于函数调用的两种不同方式,这两种方式是由编译器和运行时系统来处理的。

静态绑定是指在编译时确定调用哪个函数,通常在编译时就能够确定函数的调用路径。这种绑定方式在编译期间就已经确定了,因此也被称为静态多态。静态绑定通常发生在以下情况下:

  • 非虚函数调用:对于普通的非虚函数,编译器在编译时就可以确定调用哪个函数。
  • 基类指针或引用调用派生类对象的成员函数,但该函数不是虚函数。
class Base {
public:
    void foo() {
        // Some code...
    }
};

class Derived : public Base {
public:
    void foo() {
        // Some code specific to Derived...
    }
};

int main() {
    Base b;
    Derived d;

    Base* ptr = &b;
    ptr->foo();  // 调用 Base::foo()

    ptr = &d;
    ptr->foo();  // 仍然调用 Base::foo(),因为 foo() 不是虚函数
    return 0;
}

2. 动态绑定(动态多态)

动态绑定是指在运行时确定调用哪个函数,通常发生在虚函数的调用中。当基类指针或引用调用派生类对象的虚函数时,实际上会根据对象的实际类型来决定调用哪个函数,这种绑定方式直到运行时才能确定,因此也被称为动态多态。

class Base {
public:
    virtual void foo() {
        // Some code...
    }
};

class Derived : public Base {
public:
    void foo() override {
        // Some code specific to Derived...
    }
};

int main() {
    Base b;
    Derived d;

    Base* ptr = &b;
    ptr->foo();  // 调用 Base::foo()

    ptr = &d;
    ptr->foo();  // 调用 Derived::foo(),因为 foo() 是虚函数
    return 0;
}

注意:C++ 中,虚函数的行为是动态绑定的,而虚函数的参数是静态绑定的。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值