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

加qq1126137994 微信:liu1126137994

1、面向对象中的抽象概念;
这里写图片描述

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

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

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

面向对象中的抽象类:

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

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

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

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

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

    4、 纯虚函数的语法规则:
    这里写图片描述

抽象类初探:

#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. 接口是一种特殊的抽象类

猜你喜欢

转载自blog.csdn.net/qq_37375427/article/details/80037307
今日推荐