C++面向对象编程:深入探索虚拟函数与多态性

需积分: 48 185 下载量 132 浏览量 更新于2024-08-10 收藏 4.41MB PDF 举报
"节详细介绍虚拟函数-算法设计 jon_kleinberg英文原版" 本资源主要探讨了C++中的类继承和子类型,特别是关于虚拟函数的使用和动态绑定的概念。在面向对象编程中,虚拟函数是实现多态性的重要机制。通过虚拟函数,程序员可以编写通用的代码,这些代码能够处理不同类的对象,即使这些类是在运行时才确定的。 在描述中,示例展示了如何使用基类指针调用派生类的方法。`eval()`函数接受不同类型的查询对象(如`AndQuery`, `NotQuery`, `OrQuery`, `NameQuery`),这些类型都从`Query`类派生。由于它们都是`Query`的子类,因此可以安全地使用基类指针调用`eval()`。如果尝试用非`Query`派生类的对象(如`string`)调用`eval()`,则会导致编译错误,因为`string`不是`Query`的子类。 在`eval()`函数内部,`pquery->eval();`的调用依赖于动态绑定。这意味着在运行时,会根据`pquery`实际指向的对象类型调用相应的`eval()`函数实例。这种机制使得在程序执行期间,即使`pquery`指向的对象类型在不断变化,也能正确地调用对应的成员函数。 C++中的多态性是通过基类指针或引用实现的,但并非所有指针或引用操作都会导致多态。例如,`int *pi`和`void *pvi`就不涉及多态,因为它们不包含类层次结构的信息。只有像`Query *pquery`这样的基类指针,才能指向任何`Query`派生类的对象,从而实现多态性。 在C++ Primer第三版中,作者深入讲解了C++语言的这一核心特性,帮助读者理解并掌握如何在实际编程中有效利用多态性和虚拟函数。书中涵盖了C++的最新标准,使得代码更易于移植,并且与C++标准库兼容,提供了一套全面的基础设施。通过学习,读者可以更深入地理解C++语言,不仅限于其作为C语言超集的传统认知。