C++[第十六章]--抽象类和纯虚函数
发布人:shili8
发布时间:2025-03-14 03:32
阅读次数:0
**第十六章 C++ -- 抽象类和纯虚函数**
在前面的章节中,我们已经学习了如何使用继承来实现多态性。然而,在某些情况下,基类可能需要定义一些方法,但不提供具体的实现。这就是抽象类和纯虚函数的作用。
**什么是抽象类?**
抽象类是一种特殊的类,它不能被实例化,也就是说不能创建其对象。抽象类通常用于定义一个接口或一个基类,子类需要继承它并提供具体的实现。
在 C++ 中,可以使用 `abstract` 关键字来声明一个抽象类。但是,这个关键字实际上并不被支持,而是通过将类名后面加上 `class` 来实现。例如:
cppclass AbstractClass { public: virtual void doSomething() =0; // 纯虚函数};
**什么是纯虚函数?**
纯虚函数是一种特殊的成员函数,它在基类中被声明为虚函数,但不提供具体的实现。在 C++ 中,可以使用 `=0` 来声明一个纯虚函数。例如:
cppclass AbstractClass { public: virtual void doSomething() =0; // 纯虚函数};
**抽象类和纯虚函数的作用**
抽象类和纯虚函数的主要作用是定义一个接口或一个基类,子类需要继承它并提供具体的实现。通过使用抽象类和纯虚函数,可以实现多态性,并且可以避免在基类中提供具体的实现。
**示例代码**
下面是一个简单的示例:
cppclass AbstractClass { public: virtual void doSomething() =0; // 纯虚函数 virtual void doSomethingElse() { // 虚函数 std::cout << "doSomethingElse()" << std::endl; } }; class ConcreteClass : public AbstractClass { public: void doSomething() override { // 重载纯虚函数 std::cout << "doSomething()" << std::endl; } void doSomethingElse() override { // 重载虚函数 std::cout << "ConcreteClass::doSomethingElse()" << std::endl; } }; int main() { ConcreteClass concrete; concrete.doSomething(); // 输出: doSomething() concrete.doSomethingElse(); // 输出: ConcreteClass::doSomethingElse() return0; }
在这个示例中,`AbstractClass` 是一个抽象类,它定义了一个纯虚函数 `doSomething()` 和一个虚函数 `doSomethingElse()`。`ConcreteClass` 是一个具体类,它继承了 `AbstractClass` 并重载了 `doSomething()` 和 `doSomethingElse()`。
**总结**
在本章中,我们学习了抽象类和纯虚函数的概念,以及它们的作用。在 C++ 中,可以使用抽象类和纯虚函数来定义一个接口或一个基类,子类需要继承它并提供具体的实现。通过使用抽象类和纯虚函数,可以实现多态性,并且可以避免在基类中提供具体的实现。
**参考**
* 《C++ Primer》第五版* 《Effective C++》第二版* 《Modern C++ Design》第一版