这里的静态绑定是什么意思
时间: 2023-07-17 22:59:58 浏览: 103
Java中的静态绑定和动态绑定
静态绑定是指在编译时确定函数调用的对象类型。在静态绑定中,编译器根据变量的声明类型来确定调用哪个函数,而不考虑运行时变量的实际类型。
在C++中,对于非虚函数,编译器会根据对象的声明类型来选择调用的函数。这种绑定是在编译时完成的,因此称为静态绑定。在静态绑定中,无论对象的实际类型是什么,都会调用声明类型所对应的函数。
例如,在下面的代码中:
```cpp
class Base {
public:
void print() {
cout << "Base" << endl;
}
};
class Derived : public Base {
public:
void print() {
cout << "Derived" << endl;
}
};
int main() {
Base b;
Derived d;
Base* ptr1 = &b;
Base* ptr2 = &d;
ptr1->print(); // 静态绑定,调用Base类的print函数
ptr2->print(); // 静态绑定,调用Base类的print函数
return 0;
}
```
无论ptr2指向Derived对象,实际类型是Derived类,但由于print函数在Base类中没有被声明为虚函数,因此在调用ptr2->print()时会发生静态绑定,调用Base类的print函数。因此输出结果为:
```
Base
Base
```
总结来说,静态绑定是在编译时根据变量的声明类型确定调用哪个函数,与变量的实际类型无关。相对应的,动态绑定是在运行时根据变量的实际类型确定调用哪个函数。
阅读全文