C++的interface

先要说明的是,C++的关键字中并没有interface,但java和C#中有interface关键字,即接口。interface和class不同,interface仅有接口声明,而且所有的声明默认的访问权限是public而非private(是不是想到了C++中的struct?)。

对于C++来说,这相当于抽象类的概念,即其中的成员函数都是纯虚函数,只有声明,没有实现。如:

class abstractClass{
        virtual memfunc1() = 0;
        virtual memfucn2() = 0;
   };

 这是一个用于实现接口的纯抽象类,仅包括纯虚函数的类(一般用作基类,派生类进行具体的实现)。纯虚函数是指用=0标记的虚函数。

   抽象类是不能实例化的,换句话说,它只是提供一个interface的功能,它并不实现这些纯虚函数。正如第一段中所讲,我们可以用C++中的struct来模拟interface,可以采用两种方式:

  1. 采用宏定义:#define  interface struct;
  2. 使用typedef:  typedef struct interface。

这样就可以在C++中使用interface了。

后记:项目中用到了FLIR相机自带的SDK,查看其example时发现一些头文件中出现了interface,如下:

interface SPINNAKER_API_ABSTRACT INodeMap{。。。}当时发现其中的函数都是virtual fuc()=0的形式,因此想到了是抽象类。当鼠标停留在INodeMap上时,显示的信息是struct Spinnaker::GenApi::INodeMap。正是上面所讲的struct!!

猜你喜欢

转载自blog.csdn.net/lovekdy/article/details/83379304