[C++] 多态 -- 多态原理 -- 动静态绑定
在C++中,多态性是通过虚函数实现的,虚函数允许在派生类中被重写(override)。当基类指针或引用指向派生类对象时,调用虚函数会根据实际指向的对象类型执行相应的函数版本。
动态绑定(Dynamic Binding):在运行时确定函数调用的对象类型,并调用相应版本的虚函数。
静态绑定(Static Binding):在编译时确定函数调用的版本,基于指针或引用的类型。
class Base {
public:
virtual void display() {
std::cout << "Base display" << std::endl;
}
};
class Derived : public Base {
public:
void display() override {
std::cout << "Derived display" << std::endl;
}
};
int main() {
Base* ptr = new Derived(); // 基类指针指向派生类对象
ptr->display(); // 动态绑定,输出 "Derived display"
Base& ref = *ptr; // 基类引用引用基类对象
ref.display(); // 静态绑定,输出 "Base display"
delete ptr;
return 0;
}
在上述代码中,ptr->display()
使用了动态绑定,因为 ptr 指向的是 Derived 类型的对象,所以调用的是 Derived 类中的 display
函数。而 ref.display()
使用了静态绑定,因为 ref 是基类引用,它引用的是基类对象,所以调用的是 Base 类中的 display
函数。
评论已关闭