抽象类和存虚函数

本文介绍了抽象类和纯虚函数的概念,阐述了它们在定义接口、实现多态以及设计模式中的应用,同时强调了派生类的实现要求和注意事项,包括抽象类的构造与析构函数处理。
摘要由CSDN通过智能技术生成
1. 抽象类(Abstract Class)
  • 定义: 抽象类至少包含一个纯虚函数的类。它通常用于定义一个接口,为派生类提供一个基类。

  • 作用: 它定义了派生类应该实现的接口和方法的原型,但不提供方法的具体实现。

  • 创建对象: 不能直接实例化抽象类来创建对象。

2. 纯虚函数(Pure Virtual Function)
  • 定义: 在类中声明的、没有具体实现、以= 0结尾的虚函数。

  • 作用: 强制要求派生类必须覆盖这个函数,提供具体的实现。

  • 声明方式:

    virtual ReturnType FunctionName(Parameters...) = 0;
    
3. 代码示例
// 抽象类
class Shape {
public:
    // 纯虚函数
    virtual void draw() const = 0;
    virtual void rotate() = 0;
    virtual ~Shape()};

// 派生类
class Circle : public Shape {
public:
    void draw() const override {
        // 实现绘制圆形的代码
    }

    void rotate() override {
        // 实现旋转圆形的代码
    }
};

在上面的代码中,Shape是一个抽象类,它定义了两个纯虚函数:drawrotateCircle是一个派生自Shape的类,它提供了这两个函数的具体实现。

4. 使用场景
  • 当你希望定义一个通用接口,由不同的子类以不同的方式实现时,可以使用抽象类。
  • 用于多态性,可以使用抽象类的指针或引用来实现对所有派生类对象的通用操作。
  • 设计模式中常见,如工厂模式、模板方法模式中经常作为基类。
5. 注意事项
  • 纯虚函数定义了接口,不提供实现。派生类必须覆盖所有纯虚函数,否则它们自己也将成为抽象类。
  • 抽象类可以包含非纯虚函数,这些函数可以有自己的默认实现。
  • 抽象类可以有构造函数,虽然不能直接创建对象,但可以在派生类对象创建时被调用。
  • 抽象类的指针或引用可以指向派生类的对象,这是多态的基础。
  • 如果一个类从抽象类派生,但没有实现所有纯虚函数,那么这个派生类也是抽象类。
  • 抽象类的析构函数应该是虚的,这确保了通过基类指针删除派生类对象时能够调用正确的析构函数。
  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值