抽象类通过纯虚函数定义接口,派生类必须实现这些函数。示例中Shape为抽象类,Rectangle和Circle继承并实现其draw()和area()方法,主函数用基类指针数组实现多态调用,体现统一接口处理不同图形的设计思想。

在C++中,抽象类是一种不能被实例化的类,通常用于定义接口或公共基类,要求派生类实现特定的成员函数。实现抽象类的关键是使用纯虚函数。
什么是纯虚函数
纯虚函数是在基类中声明但不提供实现的虚函数,由派生类来具体实现。含有至少一个纯虚函数的类就是抽象类。
语法格式如下:
virtual 返回类型 函数名() = 0;
这里的 = 0 表示该虚函数是“纯”的,没有默认实现。
立即学习“C++免费学习笔记(深入)”;
定义一个抽象类
下面是一个简单的抽象类示例,表示“图形”基类:
#includeusing namespace std; // 抽象类 class Shape { public: virtual void draw() = 0; // 纯虚函数 virtual double area() const = 0; // 纯虚函数 virtual ~Shape() {} // 虚析构函数建议添加 };
// 派生类:矩形 class Rectangle : public Shape { private: double width, height; public: Rectangle(double w, double h) : width(w), height(h) {}
void draw() override { cout zuojiankuohaophpcnzuojiankuohaophpcn "Drawing a rectangle\n"; } double area() const override { return width * height; }};
// 派生类:圆形 class Circle : public Shape { private: double radius; public: Circle(double r) : radius(r) {}
void draw() override { cout zuojiankuohaophpcnzuojiankuohaophpcn "Drawing a circle\n"; } double area() const override { return 3.14159 * radius * radius; }};
使用抽象类
由于抽象类不能实例化,必须通过指针或引用调用其派生类对象。常见用法包括多态和接口统一处理。
int main() {
// Shape s; // 错误:不能实例化抽象类
Shape* shapes[2];
shapes[0] = new Rectangle(4.0, 5.0);
shapes[1] = new Circle(3.0);
for (int i = 0; i zuojiankuohaophpcn 2; ++i) {
shapes[i]-youjiankuohaophpcndraw();
cout zuojiankuohaophpcnzuojiankuohaophpcn "Area: " zuojiankuohaophpcnzuojiankuohaophpcn shapes[i]-youjiankuohaophpcnarea() zuojiankuohaophpcnzuojiankuohaophpcn endl;
}
// 记得释放内存
for (int i = 0; i zuojiankuohaophpcn 2; ++i) {
delete shapes[i];
}
return 0;}
关键要点说明
- 抽象类不能创建对象,只能作为基类被继承。
- 派生类必须实现基类中的所有纯虚函数,否则它也会成为抽象类。
- 建议为抽象基类提供虚析构函数,防止删除派生类对象时发生资源泄漏。
- 抽象类可以包含普通成员函数、构造函数、受保护成员等,不限于纯虚函数。
- 多态性通过基类指针或引用调用派生类方法,体现抽象类的设计价值。
基本上就这些。掌握纯虚函数和抽象类的使用,有助于设计出结构清晰、扩展性强的C++程序。











