在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;
}