关于C++中的接口的问题

           最近经常听到对于C++中的接口问题,我想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;
};

也就是抽象类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值