zoukankan      html  css  js  c++  java
  • c++ 如何编写接口类(interface)

    接口类简介:

            接口是一系列抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要由具体的类去实现,然后第三方就可以通过这组抽象方法调用,让具体的类执行具体的方法。

    用c++实现接口类时需要注意一下几点:

    1、接口类中不应该声明成员变量,静态变量。

    2、可以声明静态常量作为接口的返回值状态,需要在对应的cpp中定义并初始化,访问时需要使用"接口类型::静态常量名"访问

    2、定义的接口方法使用virtual 修饰符 和 “=0” 修饰,表示该方法是纯虚的。

    3、因为接口类是无法创建对象的,所以不应该编写构造函数和析构函数

    IShape.h 

    #ifndef ISHAPE_H
    #define ISHAPE_H
     
     
    class IShape
    {
    public:
        virtual int area() = 0;
        static const int MIN_AREA;
    };
     
    #endif // ISHAPE_H

    IShape.cpp

    #include "ishape.h"
     
    const int IShape::MIN_AREA = 0;

    IAction.h

    #ifndef IACTION_H
    #define IACTION_H
     
     
    class IAction
    {
    public:
        virtual void run() = 0;
    };
     
    #endif // IACTION_H

    Bird.h

    #ifndef BIRD_H
    #define BIRD_H
     
    #include "iaction.h"
    #include "ishape.h"
     
     
     
    class Bird : public IShape, public IAction
    {
    public:
        Bird();
        ~Bird();
     
        // IAction interface
    public:
        void run() override;
     
        // IShape interface
    public:
        int area() override;
     
     
    };
     
    #endif // BIRD_H

    Bird.cpp

    #include "bird.h"
     
    #include <iostream>
     
    Bird::Bird()
    {
        std::cout<<"小鸟出生了"<<std::endl;
    }
     
    Bird::~Bird()
    {
        std::cout<<"小鸟挂掉了"<<std::endl;
    }
     
    void Bird::run()
    {
        std::cout<<"小鸟飞呀飞呀"<<std::endl;
    }
     
    int Bird::area()
    {
        std::cout<<"小鸟的形状像小鸡仔的形状"<<std::endl;
        std::cout<<IShape::MIN_AREA<<std::endl;            //这里访问常量是注意
    }

    main.cpp

    #include "bird.h"
     
    void doRun(IAction *object)
    {
        object->run();
    }
     
    void getArea(IShape *object)
    {
        object->area();
    }
     
    int main()
    {
        Bird *bird = new Bird();
        doRun(bird);
        getArea(bird);
        delete bird;
        return 0;
    }

    执行效果:

    参考:

    https://www.cnblogs.com/lx753932159/p/5464406.html

    https://blog.csdn.net/netyeaxi/article/details/80724557

  • 相关阅读:
    Step by step Dynamics CRM 2013安装
    SQL Server 2012 Managed Service Account
    Step by step SQL Server 2012的安装
    Step by step 活动目录中添加一个子域
    Step by step 如何创建一个新森林
    向活动目录中添加一个子域
    活动目录的信任关系
    RAID 概述
    DNS 正向查找与反向查找
    Microsoft Dynamics CRM 2013 and 2011 Update Rollups and Service Packs
  • 原文地址:https://www.cnblogs.com/h2zZhou/p/10481501.html
Copyright © 2011-2022 走看看