MST

星途 面试题库

面试题:C++中纯虚函数如何定义抽象类的基本接口

在C++中,阐述纯虚函数是怎样为抽象类定义基本接口的?请举例说明一个包含纯虚函数的抽象类,并解释为什么纯虚函数能起到这种作用。
37.1万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 纯虚函数为抽象类定义基本接口的方式
    • 纯虚函数在类中只声明而不定义具体实现(在声明语句末尾加上 = 0)。它为派生类提供了一个统一的接口规范,派生类必须重写这些纯虚函数以提供具体的实现,否则派生类也会成为抽象类。通过这种方式,纯虚函数定义了一组所有派生类都应该遵循的基本行为,形成了抽象类的基本接口。
  2. 包含纯虚函数的抽象类示例
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);
    }
};
  1. 纯虚函数起到这种作用的原因
    • 强制一致性:纯虚函数强制所有派生类必须实现特定的函数,保证了派生类具有相同的基本接口,使得不同派生类对象在使用相同接口时具有一致性。例如上述 Shape 类中,CircleRectangle 类都必须实现 calculateAreacalculatePerimeter 函数,这样在使用 Shape 指针或引用调用这些函数时,无论指向的是 Circle 还是 Rectangle 对象,都能通过统一的接口调用到正确的实现。
    • 抽象概念:抽象类本身通常代表一种抽象的概念,不能被实例化,而纯虚函数正是这种抽象概念的具体体现,它让抽象类专注于定义接口,而将具体实现留给派生类,符合面向对象编程中抽象和封装的原则。