10、c++中的抽象类和接口

此文编写参考狄泰软件学院唐佐林老师的视频课程,如有错误之处,欢迎指正。

一、什么是抽象类

1、引入:

在进行面向对象分析时,会发现一些抽象的概念,如图形的面积怎么算?但是图形有很多种图形,如圆形、矩形、三角形等等,所以在现实生活中我们要知道具体的图形类型才能够进一步的去计算面积,因此对概念上的“图形”求面积是没有意义的,因此“图形”只是一个概念上的类型,没有具体的对象,但是为了描绘生活问题,这个概念上的类型又是必须存在的,那么如何解决这种问题?因此也就引入了抽象类。“图形”是现实生活中各种图形的抽象概念,因此:

  • 程序中必须反映抽象的图形
  • 程序中通过抽象类表示图形的概念
  • 抽象类不能够创建对象,只能用于继承

2、定义

(1)概念 ---面向对象中的抽象类
  • 可用于表示现实世界中的抽象概念
  • 是一种只能产生类型,而不能产生对象的类
  • 只能被继承并重写相关函数
  • 直接特征是相关函数没有完整的实现
(2)c++中的抽象类
  • c++语言中没有抽象类的概念,或者说部直接支持抽象类
  • c++中通过纯虚函数来实现抽象类
  • 纯虚函数是指只定义原型的成员函数
  • 一个c++类中存在纯虚函数就成为了抽象类
(3)纯虚函数的语法规则

如:

class shape
{
public:
	virtual double area()=0;//"=0"用于告诉编译器当前是声明纯虚函数,因此不需要定义函数体。
}

二、抽象类例程

1、例程

#include <iostream>
#include <string>

using namespace std;

class Shape//定义抽象类
{
public:
    virtual double area() = 0;//定义真正的虚函数
};

class Rect : public Shape
{
    int ma;
    int mb;
public:
    Rect(int a, int b)
    {
        ma = a;
        mb = b;
    }
    double area()
    {
        return ma * mb;
    }
};

class Circle : public Shape
{
    int mr;
public:
    Circle(int r)
    {
        mr = r;
    }
    double area()
    {
        return 3.14 * mr * mr;
    }
};

void area(Shape* p)
{
    double r = p->area();
    
    cout << "r = " << r << endl;
}
int main()
{
    Rect rect(1, 2);
    Circle circle(10);
    
    area(&rect);
    area(&circle);
    
    return 0;
}

在这里插入图片描述
分析:shape抽象类不能够定义具体的对象,但是却可以定义指针,所以该指针最后只能指向子类,并且用指针调用纯虚函数,也就是说shape这个抽象类中的纯虚函数肯定不是在抽象类内部实现的,而是在它的子类实现的。

2、总结

  • 抽象类只能用作父类被继承
  • 子类必须实现纯虚函数的具体功能
  • 纯虚函数被实现后成为虚函数
  • 如果子类没有实现纯虚函数,则子类成为抽象类,也就是此时同样不能够用子类去创建对象

三、接口

什么是接口?满足下面条件的c++类称之为接口

  • 类中没有定义任何的成员变量
  • 所有的成员函数都是公有的
  • 所有的成员函数都是纯虚函数
  • 接口是一种特殊的抽象类
    概念理解如下所示,实战例程以后学习后再写。
#include <iostream>
#include <string>

using namespace std;
//模拟串口编程
class Channel//该类中只有成员函数,且成员函数都是纯虚函数,同时这个时候没有定义任何的成员变量,所以该类是抽象类
{
public:
    virtual bool open() = 0;//打开串口
    virtual void close() = 0;//关闭串口
    virtual bool send(char* buf, int len) = 0;//发送数据
    virtual int receive(char* buf, int len) = 0;//接收数据
};

int main()
{
    return 0;
}

四、总结

  • 抽象类只能用用于描述现实世界中的抽象概念
  • 抽象类只能被继承而不能创建对象
  • c++中没有抽象类的概念
  • c++中通过纯虚函数实现抽象类
  • 类中只存在纯虚函数的时候成为接口
  • 接口是一种特殊的抽象类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值