欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【C++深度剖析教程30】C++中抽象类和接口

程序员文章站 2022-05-22 11:14:11
...

加qq1126137994 微信:liu1126137994

1、面向对象中的抽象概念;
【C++深度剖析教程30】C++中抽象类和接口

在现实中,需要知道具体的图形类型才能知道如何求面积,但是对于抽象的‘图形’,我们是没法求其面积的,而且对其求面积也是没有意义的:

class shape
{
public:
    double area()
    {
        return 0;
    }
};

shape 只是一个概念上的类型,没有对象!!!
2、那么什么是抽象类呢?

面向对象中的抽象类:

  • 可用于表示现实世界中的抽象概念
  • 是一种只能定义类型却不能产生对象的类型
  • 只能被继承并重写相关函数
  • 直接特征是相关函数没有完整的实现

上面说道的shpe是现实世界中的抽象的图形概念:
因此:

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

3、C++中是如何实现抽象类的:

  1. C++通过纯虚函数实现抽象类
  2. 纯虚函数指的是:只定义函数原型的成员函数
  3. 一个C++的类中存在纯虚函数,就构成了抽象类

    4、 纯虚函数的语法规则:
    【C++深度剖析教程30】C++中抽象类和接口

抽象类初探:

#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;
}

小结:

  • 抽象类只能用作父类被继承
  • 子类必须实现纯虚函数的具体功能
  • 纯虚函数被实现后,成为虚函数
  • 如果子类没有实现纯虚函数,那么子类成为抽象类

5、什么是接口?

满足下面条件的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;
}

6、总结:

  1. 抽象类用于描述现实世界中的抽象概念
  2. 抽象类只能被继承不能创建对象
  3. C++中没有抽象类的概念
  4. C++中通过纯虚函数实现抽象类
  5. 类中只有纯虚函数时称为接口
  6. 接口是一种特殊的抽象类
相关标签: 抽象类 接口