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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第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++中没有真正的抽象类接口的概念

以上是关于第52课 C++中的抽象类和接口的主要内容,如果未能解决你的问题,请参考以下文章

PHP中的抽象类和接口

第4节:Java基础 - 必知必会(中)

使用抽象类和接口的优解

Java的接口和C++的虚类的相同和不同处?

抽象类和接口的区别

关于类抽象类和接口的继承关系