多态性:即把具有继承关系的多个类型(不同派生类)称为多态类型,因为我们能使用这些类型的”多种形式”而无需在意他们的差异。指针和引用的静态类型和动态类型不同是C++支持多态性的本质。
当我们使用基类的指针或引用调用基类中定义的一个函数时,我们并不知道该函数真正作用的对象是什么类型,因为他可能是一个基类的对象,也可能是一个派生类的对象。如果该函数是虚函数,则直到运行时才会决定到底执行哪个版本,判断的依据是指针或引用所绑定的对象的真实类型。
另一方面,对非虚函数的调用是在编译时进行绑定的,即定义的是什么类型,就调用该类型的函数,例如,定义的是基类,用派生类去初始化基类,无论是指针或引用还是普通类型,调用的非虚函数都是基类中定义的那个函数。类似的,通过对象进行的函数(虚函数和非虚函数)调用时也是在编译时绑定。通过对象进行函数的调用将在编译时绑定到该对象所属类中的函数版本上。
注意:当且仅当对通过指针或引用调用虚函数时,才会在运行时解析该调用,也只有在这种情况下,对象的动态类型和静态类型不同。只要不是调用虚函数,定义的是什么类型,就是什么类型,即动态类型和静态类型是一样的。调用的函数就是该类型的函数。即C++的多态性是通过虚函数重写实现的。
C++ 多态
最新推荐文章于 2024-03-09 11:04:25 发布