纯虚函数是什么

发布于:2025-08-12 ⋅ 阅读:(13) ⋅ 点赞:(0)

📄问题

纯虚函数是什么

📝我的回答

纯虚函数是C++中一种特殊的虚函数,它在基类中只有声明而没有实现,通过在函数声明后添加'= 0'来标识。例如:

class Shape {
public:
    virtual double area() const = 0;  // 纯虚函数
    virtual ~Shape() {}
};

纯虚函数有几个重要特点和作用:

首先,包含纯虚函数的类被称为抽象类(Abstract Class)。抽象类不能被直接实例化,只能作为基类被继承。这是因为纯虚函数表示一个必须由派生类实现的接口,基类本身并不提供实现。如果尝试创建抽象类的对象,编译器会报错:

Shape s;  // 编译错误:不能创建抽象类的对象
Shape* ps = new Shape();  // 同样错误

其次,派生类必须实现所有继承的纯虚函数,否则派生类也会变成抽象类。这强制派生类提供特定接口的实现:

class Circle : public Shape {
private:
    double radius;
public:
    Circle(double r) : radius(r) {}
    
    // 必须实现area函数,否则Circle也是抽象类
    double area() const override {
        return 3.14159 * radius * radius;
    }
};

第三,纯虚函数可以有实现,尽管这不太常见。定义方式是在类外单独实现:

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

// 纯虚函数的实现
void Base::foo() {
    std::cout << "Base::foo implementation" << std::endl;
}

如果提供了实现,派生类可以选择调用基类的实现:

class Derived : public Base {
public:
    void foo() override {
        Base::foo();  // 调用纯虚函数的实现
        std::cout << "Derived::foo" << std::endl;
    }
};

纯虚函数在设计模式和软件架构中非常有用,主要用于以下场景:

定义接口:纯虚函数可以定义一个必须由派生类实现的接口,这是实现多态的强大工具。

实现"接口"概念:虽然C++没有像Java那样的interface关键字,但可以通过只包含纯虚函数的类来模拟接口。

强制派生类提供实现:当基类无法提供合理的默认实现时,可以将函数声明为纯虚函数,强制派生类提供特定功能。

纯虚函数与普通虚函数的区别在于,普通虚函数可以有默认实现,派生类可以选择重写或使用默认实现;而纯虚函数强制要求派生类提供实现(除非派生类也是抽象类)。


网站公告

今日签到

点亮在社区的每一天
去签到