理解面向对象的虚函数与纯虚函数

5星 · 超过95%的资源 需积分: 9 3 下载量 143 浏览量 更新于2024-08-01 收藏 47KB DOC 举报
"面向对象的虚函数使用总结" 在面向对象编程中,虚函数是实现多态性的一个关键机制,特别是在C++中。虚函数允许我们通过基类指针或引用调用派生类的成员函数,从而实现动态绑定。本摘要将详细探讨虚函数、纯虚函数以及它们在多态中的应用。 一、虚函数 虚函数在C++中通过`virtual`关键字声明,它的主要目的是在运行时决定调用哪个函数版本,而不是在编译时确定。这使得代码能够处理不同类型的对象,即使这些对象是通过其公共基类的指针或引用访问的。例如: ```cpp class Base { public: virtual void func() { ... } }; class Derived : public Base { public: void func() override { ... } }; Base* basePtr = new Derived(); basePtr->func(); // 调用Derived的func(),而非Base的func() ``` 二、纯虚函数 纯虚函数是一种特殊的虚函数,它不提供具体实现,通常以`=0`结尾声明。它的存在使得包含它的类成为抽象类,抽象类不能实例化。纯虚函数的目的是强制派生类提供具体的实现,以满足基类接口的要求。例如: ```cpp class Abstract { public: virtual void abstractFunc() = 0; // 纯虚函数 }; class Concrete : public Abstract { public: void abstractFunc() override { ... } // 派生类必须实现此函数 }; ``` 三、多态性 多态性是面向对象编程的三大特性之一(另外两个是封装和继承)。C++支持两种类型的多态性: 1. **编译时多态性**:通过函数重载实现,即同一作用域内具有相同名称但参数列表不同的函数。编译器根据传入的参数类型在编译期间决定调用哪个函数。 2. **运行时多态性**:通过虚函数实现,也称为动态多态性。在运行时,系统根据对象的实际类型决定调用哪个函数,即使通过基类指针或引用进行调用。 四、抽象类 含有纯虚函数的类被称为抽象类。抽象类不能直接创建对象,但可以作为其他类的基类。抽象类定义了一个接口,派生类必须实现这个接口才能被实例化。抽象类的存在允许我们定义通用接口,而不关心具体实现细节。 五、示例代码 在给定的代码片段中,`class A`定义了一个包含一个纯虚函数`f3()`的抽象基类。`class B`从`class A`派生并提供了所有基类虚函数的实现,包括`f3()`。在`main`函数中,通过`A`的指针`m_j`创建了一个`B`对象,并调用了`f1`、`f2`和`f3`,这些调用都会根据实际对象类型(`B`)来执行相应的函数实现。 虚函数和纯虚函数是C++中实现多态性和接口设计的关键工具。它们使得代码更加灵活,能够处理不同类型的对象,并且能够适应未来可能的扩展。