C++中的纯虚函数

C++中的纯虚函数(Pure Virtual Function)是一个特殊的虚函数,它在基类中被声明,但没有具体的实现(即函数体为空,并通常被赋值为0,即= 0)。纯虚函数的主要作用是作为一个接口,强制要求从该基类派生的任何子类都必须实现这个函数。如果一个类至少含有一个纯虚函数,那么这个类就被称为抽象类(Abstract Class)。抽象类不能被实例化,即不能创建该类的对象,但可以被用作基类来创建派生类的对象。

纯虚函数的作用
定义接口:纯虚函数提供了一种方式,允许基类定义一个接口,要求所有派生类都必须实现这个接口。
强制派生类实现:如果一个类被设计为基类,并希望派生类提供某些特定功能的具体实现,则可以将这些功能声明为纯虚函数。
禁止直接实例化:包含纯虚函数的类不能直接实例化对象,这有助于避免误用,因为抽象类通常仅用作其他类的基类。

例子

下面是一个使用纯虚函数的简单例子,展示了一个表示形状的基类(Shape),以及从这个基类派生的两个子类(Circle和Rectangle),每个子类都实现了计算面积的方法。

下面展示一些 内联代码片


#include <iostream>  
  
// 抽象基类Shape  
class Shape {  
public:  
    // 纯虚函数  
    virtual double area() const = 0;  
  
    // 虚析构函数,允许通过基类指针删除派生类对象  
    virtual ~Shape() {}  
};  
  
// Circle类,继承自Shape  
class Circle : public Shape {  
private:  
    double radius;  
  
public:  
    Circle(double r) : radius(r) {}  
  
    // 实现area纯虚函数  
    double area() const override {  
        return 3.14159 * radius * radius;  
    }  
};  
  
// Rectangle类,继承自Shape  
class Rectangle : public Shape {  
private:  
    double width, height;  
  
public:  
    Rectangle(double w, double h) : width(w), height(h) {}  
  
    // 实现area纯虚函数  
    double area() const override {  
        return width * height;  
    }  
};  
  
int main() {  
    Shape* circle = new Circle(5.0);  
    Shape* rectangle = new Rectangle(4.0, 6.0);  
  
    std::cout << "Circle area: " << circle->area() << std::endl;  
    std::cout << "Rectangle area: " << rectangle->area() << std::endl;  
  
    delete circle;  
    delete rectangle;  
  
    return 0;  

}

在这个例子中,Shape类定义了一个纯虚函数area(),表示任何形状都应该能够计算其面积。然而,Shape类本身不提供area()的实现,因为它只是一个抽象的概念。Circle和Rectangle类都继承自Shape类,并提供了area()的具体实现,分别用于计算圆和矩形的面积。这样,通过基类指针(Shape*)可以指向不同的派生类对象,并调用其area()方法来计算面积,体现了多态性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值