日复一日 - C/C++ 类与抽象
抽象类在C++中是一种特殊的类,它不能直接实例化,而是用作其他类的基类。具体来说,抽象类通常包含至少一个纯虚函数(即没有实现体的虚函数),这些函数由派生类实现。通过这种方式,抽象类定义了一组接口或者方法,但本身不能被实例化,而是需要通过派生类来实现具体功能。
主要概念和使用方法:
抽象类的定义:
- 在C++中,通过将类中的至少一个函数声明为纯虚函数来定义抽象类。例如:cpp
class Shape { public: virtual void draw() = 0; // 纯虚函数 virtual double area() const = 0; // 纯虚函数 };
- 在C++中,通过将类中的至少一个函数声明为纯虚函数来定义抽象类。例如:
抽象类的特性:
- 抽象类不能被实例化,即不能创建抽象类的对象。
- 可以将指向派生类对象的指针或引用赋值给抽象类的指针或引用,从而实现多态。
派生类的实现:
- 派生类必须实现抽象类中的所有纯虚函数,才能成为一个完整的类。
- 派生类可以根据需求增加自己的数据成员和函数,以及实现继承的接口。
实际应用场景:
- 抽象类在面向对象设计中常用于定义通用接口或协议,而具体的细节由派生类实现。
- 示例中的Shape类可以派生出具体的几何形状类(如Circle、Rectangle等),并实现各自的绘制和计算面积方法。
纯虚函数和虚函数的区别:
- 纯虚函数没有实现体(即函数体为
= 0;
),而虚函数可以有默认的实现。 - 虚函数和纯虚函数都可以被子类重写,但纯虚函数要求子类必须实现,否则子类也将成为抽象类。
- 纯虚函数没有实现体(即函数体为
通过理解和使用抽象类,可以更好地进行类的继承和多态性设计,提高代码的灵活性和可维护性。