zoukankan      html  css  js  c++  java
  • [转]C++接口的定义用一个实例说明

    哈哈,测试通过!VC6也可以用interface了!
     
    [转]C++接口的定义用一个实例说明
     
    接口是一个没有被实现的特殊的类,它是一系列操作的集合,我们可以把它看作是与其他对象通讯的协议。C++中没有提供类似interface这样的关键 字来定义接口,但是Mircrosoft c++中提供了__declspec(novtable)来修饰一个类,来表示该类没有虚函数表,也就是虚函数都是纯虚的。所以利用它我们依然可以定义一 个接口。代码例子如下:
    #include <IOSTREAM>
    using namespace std;

    #define interface class __declspec(novtable)

    interface ICodec
    {
    public:
        
    virtual bool Decode(char * lpDataSrc,unsigned int nSrcLen,char * lpDataDst,unsigned int *pnDstLen);
        
    virtual bool Encode(char * lpDataSrc,unsigned int nSrcLen,char * lpDataDst,unsigned int *pnDstLen);
    };

    class CCodec : public ICodec
    {
    public:
        
    virtual bool Decode(char * lpDataSrc,unsigned int nSrcLen,char * lpDataDst,unsigned int *pnDstLen)
         {
             cout
    << "解码..." << endl;
            
    return true;
         }
        
    virtual bool Encode(char * lpDataSrc,unsigned int nSrcLen,char * lpDataDst,unsigned int *pnDstLen)
         {
             cout
    << "编码..." << endl;
            
    return true;
         }
    };

    int main(int argc, char* argv[])
    {
         ICodec
    * pCodec = new CCodec();
         pCodec
    ->Decode(NULL,0,NULL,NULL);
         pCodec
    ->Encode(NULL,0,NULL,NULL);
         delete (CCodec
    *)pCodec;
        
    return 0;
    }
    上面的ICodec接口等价于下面的定义:
    
    
    class ICodec
    {
    public:
        virtual bool Decode(char * lpDataSrc,unsigned int nSrcLen,char * lpDataDst,unsigned int *pnDstLen)=0;
        virtual bool Encode(char * lpDataSrc,unsigned int nSrcLen,char * lpDataDst,unsigned int *pnDstLen)=0;
    };


    作者:海阔天

    欢迎转载!转载请注明出处:

    www.cnblogs.com/yxsylyh

  • 相关阅读:
    lua继承3
    C 调试
    lua继承
    hdoj_1102Constructing Roads(最小生成树)&& poj_2485Highways
    网络摄像头监控
    hdoj_3336Count the string(KMP)
    逻辑思维训练500题(带答案)
    AC自动机算法
    poj_3080Blue Jeans && poj_3450Corporate Identity(KMP)
    hdoj_1162Eddy's picture(最小生成树)
  • 原文地址:https://www.cnblogs.com/yxsylyh/p/vc6interface.html
Copyright © 2011-2022 走看看