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

1. 什么是抽象类

(1)面向对象中的抽象概念

     

思考:抽象图形中,图形的面积如何计算?

(2)现实中:需要知道具体的图形类型,才能求面积。

(3)Shape只是一个概念上的类型(抽象图形类型),没有具体对象。

 

2. 面向对象中的抽象类

(1)可用于表示现实世界中的抽象概念

(2)抽象类是一种只能定义类型,而不能产生对象的类

(3)只能被继承重写相关函数

(4)直接特征相关函数没有完整的实现

 

3. 抽象类纯虚函数

(1)C++语言中没有抽象类的概念,它是通过纯虚函数实现抽象类当一个C++类中存在纯虚函数就成了抽象类

(2)纯虚函数是指只定义原型的成员函数

(3)纯虚函数语法规则virtual double area() = 0;   // “=0”用于告诉编译器当前是声明纯虚函数,因此不需要定义函数体。

 

【编程实验】抽象类初探

#include <iostream>

 

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 ret = p->area(); //多态

    cout << "area = " << ret << endl;

}

 

int main()

{

    Rect rect(3, 5);

    Circle circle(10);

   

    area(&rect);

    area(&circle);

   

    return 0;

}

 

(4)抽象类只能用作父类被继承

(5)子类必须实现纯虚函数的具体功能如果子类没有实现纯虚函数则子类也成为抽象类

(6)纯虚函数被实现后成为虚函数

 

4. C++中的接口

(1)没有定义任何的成员变量

(2)所有的成员函数都是公有的

(3)所有的成员函数都是纯虚函数

(4)接口是一种特殊的抽象类

 

【编程实验】接口初探

#include <iostream>

 

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;

}

 

5. 小结

(1)抽象类用于描述现实世界中的抽象概念

(2)抽象类只用被继承不能被创建对象

(3)C++通过纯虚函数实现抽象类

(4)接口是一种特殊的抽象类,它是只存在纯虚函数的抽象类

(5)C++没有真正的抽象类接口概念

posted @ 2018-12-30 23:35  梦心之魂  阅读(156)  评论(0编辑  收藏  举报