日复一日 - C/C++ 类与抽象

抽象类在C++中是一种特殊的类,它不能直接实例化,而是用作其他类的基类。具体来说,抽象类通常包含至少一个纯虚函数(即没有实现体的虚函数),这些函数由派生类实现。通过这种方式,抽象类定义了一组接口或者方法,但本身不能被实例化,而是需要通过派生类来实现具体功能。

主要概念和使用方法:

  1. 抽象类的定义:

    • 在C++中,通过将类中的至少一个函数声明为纯虚函数来定义抽象类。例如:
      cpp
      class Shape { public: virtual void draw() = 0; // 纯虚函数 virtual double area() const = 0; // 纯虚函数 };
  2. 抽象类的特性:

    • 抽象类不能被实例化,即不能创建抽象类的对象。
    • 可以将指向派生类对象的指针或引用赋值给抽象类的指针或引用,从而实现多态。
  3. 派生类的实现:

    • 派生类必须实现抽象类中的所有纯虚函数,才能成为一个完整的类。
    • 派生类可以根据需求增加自己的数据成员和函数,以及实现继承的接口。
  4. 实际应用场景:

    • 抽象类在面向对象设计中常用于定义通用接口或协议,而具体的细节由派生类实现。
    • 示例中的Shape类可以派生出具体的几何形状类(如Circle、Rectangle等),并实现各自的绘制和计算面积方法。
  5. 纯虚函数和虚函数的区别:

    • 纯虚函数没有实现体(即函数体为= 0;),而虚函数可以有默认的实现。
    • 虚函数和纯虚函数都可以被子类重写,但纯虚函数要求子类必须实现,否则子类也将成为抽象类。

通过理解和使用抽象类,可以更好地进行类的继承和多态性设计,提高代码的灵活性和可维护性。