• 第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++没有真正的抽象类接口的概念

  • 相关阅读:
    前端 CSS 与HTML 学习笔记详细讲解
    Python-Django之DRF
    Flask
    flask
    Python
    Python爬虫
    前端开发规范
    为什么 [] == ![] 输出是true?
    javascript准确判断各种数据类型
    JavaScript数组扁平化常用方法总结
  • 原文地址:https://www.cnblogs.com/hoiday/p/10201115.html
Copyright © 2020-2023  润新知