在C++中,静态绑定(Static Binding)通常发生在成员函数调用时,特别是当这些成员函数是虚函数时。静态绑定遵循编译时确定调用的原则,这意味着在编译阶段就已经确定了要调用的函数版本,而不是在运行时。
要实现静态绑定,你可以使用以下方法:
#include <iostream>
class Base {
public:
virtual void print() {
std::cout << "Base::print()" << std::endl;
}
};
class Derived : public Base {
public:
void print() override {
std::cout << "Derived::print()" << std::endl;
}
};
int main() {
Base* basePtr = new Derived();
basePtr->print(); // 静态绑定,调用Derived::print()
delete basePtr;
return 0;
}
#include <iostream>
template <typename Derived>
class Base {
public:
void print() {
static_cast<Derived*>(this)->printImpl();
}
};
class Derived : public Base<Derived> {
public:
void printImpl() {
std::cout << "Derived::print()" << std::endl;
}
};
int main() {
Base<Derived>& baseRef = *new Derived();
baseRef.print(); // 静态绑定,调用Derived::printImpl()
delete &baseRef;
return 0;
}
在这两个例子中,我们都实现了静态绑定,即在编译阶段就确定了要调用的函数版本。这与动态绑定(Dynamic Binding)相反,动态绑定在运行时根据对象的实际类型来确定要调用的函数版本。