MST

星途 面试题库

面试题:C++中抽象类的定义方式及纯虚函数作用

请简述在C++中如何定义一个抽象类,以及抽象类中纯虚函数的作用是什么?请举例说明抽象类的使用场景。
47.0万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 定义抽象类: 在C++ 中,包含至少一个纯虚函数的类被称为抽象类。纯虚函数是在声明时初始化为 = 0 的虚函数。例如:
class Shape {
public:
    // 纯虚函数
    virtual double area() const = 0; 
};

这里 Shape 类就是一个抽象类,因为它包含了纯虚函数 area

  1. 纯虚函数的作用

    • 定义接口:纯虚函数为派生类提供了一个统一的接口,强制派生类去实现这个函数,以确保不同派生类具有一致的行为定义。
    • 阻止实例化:包含纯虚函数的类(即抽象类)不能被实例化,只能作为基类被派生类继承,从而使代码结构更加清晰和合理,体现了面向对象编程中的抽象概念。
  2. 使用场景举例: 假设有一个图形绘制的程序,需要绘制不同的图形(如圆形、矩形等)。可以定义一个抽象的 Shape 类作为基类,其中包含纯虚函数 draw 用于绘制图形,每个具体的图形类(如 CircleRectangle)继承自 Shape 类并实现 draw 函数。

class Shape {
public:
    virtual void draw() const = 0;
};

class Circle : public Shape {
private:
    double radius;
public:
    Circle(double r) : radius(r) {}
    void draw() const override {
        std::cout << "Drawing a circle with radius " << radius << std::endl;
    }
};

class Rectangle : public Shape {
private:
    double width;
    double height;
public:
    Rectangle(double w, double h) : width(w), height(h) {}
    void draw() const override {
        std::cout << "Drawing a rectangle with width " << width << " and height " << height << std::endl;
    }
};

在使用时,可以通过 Shape 指针或引用来操作不同的具体图形对象:

#include <iostream>
#include <vector>

int main() {
    std::vector<Shape*> shapes;
    shapes.push_back(new Circle(5.0));
    shapes.push_back(new Rectangle(4.0, 6.0));

    for (const auto& shape : shapes) {
        shape->draw();
        delete shape;
    }

    return 0;
}

这样通过抽象类和纯虚函数,可以以一种统一的方式处理不同类型的图形对象,提高了代码的可扩展性和可维护性。