c++抽象类/接口

        C++ 接口是使用抽象类来实现的。抽象类通常用于表示概念或设计模式;

抽象类的定义

  1. 抽象类:

    • 抽象类是一种包含至少一个纯虚函数的类,不能被实例化。
    • 通常用于定义接口,强制派生类提供某些特定的行为。
  2. 纯虚函数:

    • 声明为 virtual,并在函数声明的末尾加上 = 0
    • 这是告诉编译器,该函数的实现需要在派生类中提供。

        纯虚函数是通过在声明中使用 "= 0" 来指定的,如下所示:

class AbstractClass {
public:
    // 纯虚函数
    virtual void pureVirtualFunction() = 0;

    // 普通成员函数(可选)
    void normalFunction() {
        // 实现
    }
};
//具体示例,展示了如何使用抽象类和纯虚函数来实现一个简单的形状系统,包括一个抽象基类和两个派生类:
#include <iostream>
#include <cmath>

// 抽象类
class Shape {
public:
    // 纯虚函数
    virtual void draw() = 0; // 紧凑的图形绘制
    virtual double area() = 0; // 计算面积
};

// 派生类: Circle
class Circle : public Shape {
private:
    double radius;
public:
    Circle(double r) : radius(r) {}

    void draw() override {
        std::cout << "Drawing a circle with radius: " << radius << std::endl;
    }

    double area() override {
        return M_PI * radius * radius; // 返回圆的面积
    }
};

// 派生类: Rectangle
class Rectangle : public Shape {
private:
    double width, height;
public:
    Rectangle(double w, double h) : width(w), height(h) {}

    void draw() override {
        std::cout << "Drawing a rectangle with width: " << width << " and height: " << height << std::endl;
    }

    double area() override {
        return width * height; // 返回矩形面积
    }
};

int main() {
    // 创建形状的指针
    Shape* shape1 = new Circle(5.0);
    Shape* shape2 = new Rectangle(4.0, 6.0);

    // 绘制形状并计算面积
    shape1->draw();
    std::cout << "Area: " << shape1->area() << std::endl;

    shape2->draw();
    std::cout << "Area: " << shape2->area() << std::endl;

    // 释放内存
    delete shape1;
    delete shape2;

    return 0;
}

关键点总结

  1. 抽象类不能实例化:

    • 尝试创建一个抽象类的对象会引发编译错误。
  2. 派生类必须重写纯虚函数:

    • 如果派生类没有提供纯虚函数的实现,它仍然会被视为抽象类,并且不能被实例化。
  3. 使用抽象类实现多态:

    • 抽象类是实现多态的一种主要方式,可以使用基类指针或引用来指向派生类对象,并调用其实现。
  4. 抽象类可包含正常成员:

    • 除了纯虚函数外,抽象类还可以包含普通成员函数、构造函数和成员变量。

使用场景

  • 抽象类通常用于建立统一的接口,为多个派生类提供共同的行为。在大多数大型软件系统中,抽象类是设计模式的重要组成部分,帮助设计者更好地组织和管理代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值