zoukankan      html  css  js  c++  java
  • 38 C++ 中的抽象类和接口

    1 什么是抽象类?

    • 面向对象中的抽象概念

    • 在进行面向对象分析时,会发现一些抽象的概念。如:图形的面积如何计算?

    • 在现实中需要知道具体的图形类型才能求面积,所以对概念上的“图形”求面积是没有意义的!

      • Shape 只是一个概念上的类型,没有具体的对象
      class Shape
      {
      public:
          double area()
          {
              return 0;
          }
      };
      
    • 问题:Shape 类有必要存在么?

    • 面向对象中的抽象类

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

    2 抽象类与纯虚函数

    • C++ 语言中没有抽象类的概念

    • C++ 中通过纯虚函数实现抽象类

    • 纯虚函数是指只定义原型的成员函数

    • 一个 C++ 类中存在纯虚函数就成为了抽象类

    • 纯虚函数的语法规则

      • = 0 用于告诉编译器当前是声明纯虚函数,因此不需要定义函数体
      class Shape
      {
      public:
          virtual double area() = 0;
      };
      
    • 示例:抽象类

      • Demo
        #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;
        }
      
      • 编译运行

        r = 2
        r = 314.3
        
    • 抽象类只能用作父类被继承,不可以生成对象,但可以生成抽象类的指针

    • 子类必须实现纯虚函数的具体功能

    • 纯虚函数被实现后成为虚函数

    • 如果子类没有实现纯虚函数,则子类成为抽象类

    3 接口

    • 满足下面条件的 C++ 类则成为接口

      • 类中没有定义任何的成员变量
      • 所有的成员函数都是公有的
      • 所有的成员函数都是纯虚函数
      • 接口是一种特殊的抽象类
    • 示例:接口

      • Demo
      #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;
      }
  • 相关阅读:
    js对象深拷贝
    数组去重
    css布局之双飞翼布局
    css布局之圣杯布局
    在浏览器中输入URL并回车后都发生了什么?
    浮动和清除浮动
    Javascript 构造函数模式、原型模式
    Javascript之对象组合继承
    js可以随意拖拽的div的实现
    博客美化 之博客的魔方效果
  • 原文地址:https://www.cnblogs.com/bky-hbq/p/13903931.html
Copyright © 2011-2022 走看看