- 纯虚函数为抽象类定义基本接口的方式:
- 纯虚函数在类中只声明而不定义具体实现(在声明语句末尾加上
= 0
)。它为派生类提供了一个统一的接口规范,派生类必须重写这些纯虚函数以提供具体的实现,否则派生类也会成为抽象类。通过这种方式,纯虚函数定义了一组所有派生类都应该遵循的基本行为,形成了抽象类的基本接口。
- 包含纯虚函数的抽象类示例:
class Shape {
public:
// 纯虚函数,计算面积
virtual double calculateArea() = 0;
// 纯虚函数,计算周长
virtual double calculatePerimeter() = 0;
};
class Circle : public Shape {
private:
double radius;
public:
Circle(double r) : radius(r) {}
// 重写纯虚函数,计算圆的面积
double calculateArea() override {
return 3.14159 * radius * radius;
}
// 重写纯虚函数,计算圆的周长
double calculatePerimeter() override {
return 2 * 3.14159 * radius;
}
};
class Rectangle : public Shape {
private:
double length;
double width;
public:
Rectangle(double l, double w) : length(l), width(w) {}
// 重写纯虚函数,计算矩形的面积
double calculateArea() override {
return length * width;
}
// 重写纯虚函数,计算矩形的周长
double calculatePerimeter() override {
return 2 * (length + width);
}
};
- 纯虚函数起到这种作用的原因:
- 强制一致性:纯虚函数强制所有派生类必须实现特定的函数,保证了派生类具有相同的基本接口,使得不同派生类对象在使用相同接口时具有一致性。例如上述
Shape
类中,Circle
和 Rectangle
类都必须实现 calculateArea
和 calculatePerimeter
函数,这样在使用 Shape
指针或引用调用这些函数时,无论指向的是 Circle
还是 Rectangle
对象,都能通过统一的接口调用到正确的实现。
- 抽象概念:抽象类本身通常代表一种抽象的概念,不能被实例化,而纯虚函数正是这种抽象概念的具体体现,它让抽象类专注于定义接口,而将具体实现留给派生类,符合面向对象编程中抽象和封装的原则。