纯虚函数和抽象类

纯虚函数是一种特殊的虚函数,在某些情况下,基类中不能对虚函数给出有意义的实现,把它声明为纯虚函数。

纯虚函数只有函数名、参数和返回值类型,没有函数体,具体实现留给该派生类去做。

语法:virtual 返回值类型 函数名 (参数列表)=0;

纯虚函数在基类中为派生类保留一个函数的名字,以便派生类它进行重定义。如果在基类中没有保留函数名字,则无法支持多态性。

含有纯虚函数的类被称为抽象类,不能实例化对象,可以创建指针和引用。

派生类必须重定义抽象类中的纯虚函数,否则也属于抽象类。

基类中的纯虚析构函数也需要实现。

有时候,想使一个类成为抽象类,但刚好又没有任何纯虚函数,怎么办?

方法很简单:在想要成为抽象类的类中声明一个纯虚析构函数。

下面是一个C++示例代码,展示了纯虚函数和抽象类的用法

#include <iostream>
using namespace std;

// 抽象基类
class Shape {
public:
    // 纯虚函数
    virtual void draw() const = 0;

    // 纯虚析构函数
    virtual ~Shape() = 0;
};

// 纯虚析构函数的定义
Shape::~Shape() {
    cout << "Shape destructor called" << endl;
}

// 派生类 - 圆形
class Circle : public Shape {
public:
    void draw() const override {
        cout << "Drawing Circle" << endl;
    }
    
    ~Circle() {
        cout << "Circle destructor called" << endl;
    }
};

// 派生类 - 矩形
class Rectangle : public Shape {
public:
    void draw() const override {
        cout << "Drawing Rectangle" << endl;
    }
    
    ~Rectangle() {
        cout << "Rectangle destructor called" << endl;
    }
};

int main() {
    Shape* shape1 = new Circle();
    Shape* shape2 = new Rectangle();

    shape1->draw();
    shape2->draw();

    delete shape1;
    delete shape2;

    return 0;
}

在这个示例中:

  1. Shape 类是一个抽象基类,包含一个纯虚函数 draw() 和一个纯虚析构函数。
  2. CircleRectangle 类是从 Shape 类派生出来的,并实现了 draw() 纯虚函数。
  3. main 函数中,创建了 Shape 类的指针 shape1shape2,分别指向 CircleRectangle 对象。通过多态性,调用了派生类的 draw() 函数。
  4. 最后,通过 delete 操作符,调用了析构函数,确保了资源的正确释放。

这样,通过声明纯虚函数,Shape 类成为一个抽象类,不能被实例化,但可以用于派生类对象的指针和引用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值