MST

星途 面试题库

面试题:C++纯虚函数在接口设计中的基本应用

请解释在C++中纯虚函数的定义和作用。假设你正在设计一个图形接口类 `Shape`,要求所有派生类必须实现 `draw` 方法来绘制自身,使用纯虚函数来设计这个 `Shape` 类,并说明这样设计如何体现接口设计的思想。
19.2万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

纯虚函数的定义

在C++ 中,纯虚函数是一种在基类中声明的虚函数,它没有具体的实现,在声明时通过 = 0 来标识。

纯虚函数的作用

  1. 定义接口:为派生类提供一个统一的接口,要求派生类必须实现该函数,以确保所有派生类都具有某种特定的行为。
  2. 抽象基类:包含纯虚函数的类被称为抽象基类,抽象基类不能被实例化,它主要用于为派生类提供一个通用的框架,强制派生类遵循特定的设计规范。

Shape 类的设计

class Shape {
public:
    virtual void draw() = 0; // 纯虚函数
};

class Circle : public Shape {
public:
    void draw() override {
        // 具体的绘制圆形的代码
    }
};

class Rectangle : public Shape {
public:
    void draw() override {
        // 具体的绘制矩形的代码
    }
};

体现接口设计思想

  1. 统一规范:通过在 Shape 类中定义纯虚函数 draw,为所有派生类(如 CircleRectangle)规定了必须实现的接口。这使得所有形状类都具有一致的绘制方法,调用者可以统一地使用 draw 方法来绘制不同形状,而无需关心具体的形状类型。
  2. 多态性:纯虚函数与虚函数机制配合,实现了运行时多态。调用者可以通过指向 Shape 基类的指针或引用调用 draw 方法,程序会根据实际对象的类型来调用相应派生类的 draw 实现。这体现了接口与实现的分离,提高了代码的可扩展性和可维护性。
  3. 抽象基类Shape 类作为抽象基类,不能被实例化,它的存在仅仅是为了定义接口,这种设计方式强调了接口的抽象性和规范性,使得派生类专注于实现具体的功能,符合接口设计的思想。