第52课.c++中的抽象类和接口

1.什么是抽象类

a.可用于表示现实世界中的抽象概念
b.是一种只能定义类型,而不能产生对象的类
c.只能被继承被重写相关函数 (不能创建对象,只能用于继承,可以用来定义指针)
d.直接特征是相关函数没有完整的实现

2.抽象类与纯虚函数

a.c++语言中没有抽象类的概念
b.c++中通过纯虚函数实现抽象类
c.纯虚函数是指只定义原型的成员函数
d.一个c++类中只要存在纯虚函数这个类就成为了抽象类
eg.

纯虚函数语法规则:

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

eg:

#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();       // Shape的纯虚函数,没有实现。但这里调用的是子类中实现的虚函数
                                // 因为子类中实现了父类中的纯虚函数,所以这里才能调用
    cout << "r = " << r << endl;
}

int main()
{
    Rect rect (1, 2);
    Circle circle(10);
    
    area(&rect);
    area(&circle);
    
    return 0;   
}

3.接口

a.类中没有定义任何的成员变量
b.所有的成员函数都是公有的
c.所有的成员函数都是纯虚函数
d.接口是一种特殊的抽象类

eg:

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;
};
posted @ 2019-12-05 13:34  人民广场的二道贩子  阅读(133)  评论(0编辑  收藏  举报