接口是一个没有被实现的特殊的类,它是一系列操作的集合,我们可以把它看作是与其他对象通讯的协议。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;
};

转载于:https://www.cnblogs.com/Sunwayking/articles/2178807.html

C++接口的定义用一个实例说明 [转]相关推荐

  1. java中接口的定义与实现

    1.定义接口     使用interface来定义一个接口.接口定义同类的定义类似,也是分为接口的声明和接口体,当中接口体由常量定义和方法定义两部分组成.定义接口的基本格式例如以下: [修饰符] in ...

  2. 匿名内部类探究——它是一个实例

    目录 我的学习过程 匿名内部类概述 匿名内部类探究 代码验证(匿名内部类是一个实例) 结论 我的学习过程 昨天想学习一下Java8新特性,看到Lambda表达式可以替代匿名内部类.我对匿名内部类不太理 ...

  3. java 抽象封装多态_java面向对象(封装,继承,多态,抽象,接口的定义和实现)...

    1.封装 在面向对象程式设计方法中,封装(英语:Encapsulation)是指,一种将抽象性函式接口的实作细节部份包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定 ...

  4. 11,外观模式(Facade Pattern)是为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。...

    Facade模式也叫外观模式,是由GoF提出的23种设计模式中的一种.Facade模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单的界面.这个一致的简单的界面被称作facade. ...

  5. 设计一个接口, 并设计一个实现类实现该接口,演示它们的使用。具体,创建一个名称为Person的接口,在接口中定义两个方法sayHello()和sayBye()。

    设计一个接口, 并设计一个实现类实现该接口,演示它们的使用. 具体,创建一个名称为Person的接口,在接口中定义两个方法sayHello()和sayBye().然后,创建两个实现了Person接口的 ...

  6. 假设 A 类有如下定义,设 a 是 A 类的一个实例,下列语句调用哪个是错误的?()

    假设A类有如下定义, 设a是A类的一个实例, 下列语句调用哪个是错误的?() public class A{public int i;static String s;void method1(){}s ...

  7. java语言中修饰一个常量_接口中定义一个常量所用的修饰符有: (5.0分)_学小易找答案...

    [判断题]Java中的接口不允许被继承 (5.0分) [单选题]下列程序的输出结果是( ) public class Ex_36{ public static void main(String arg ...

  8. 定义一个Dog类,包括体重和年龄两个数据成员及其成员函数,声明一个实例dog1,体重5,年龄10,使用I/O流把dog1的状态写入磁盘文件。再声明一个实例dog2,读取文件dog1的状态给dog2。

    定义一个Dog类,包括体重和年龄两个数据成员及其成员函数,声明一个实例dog1,体重5,年龄10,使用I/O流把dog1的状态写入磁盘文件.再声明一个实例dog2,通过读取文件dog1的状态赋给dog ...

  9. C++ 笔记(16)— 类和对象(类定义、类实例对象定义、访问类成员、类成员函数、类 public/private/protected 成员、类对象引用和指针)

    1. 类的定义 类定义是以关键字 class 开头,后跟类的名称.并在它后面依次包含类名,一组放在 {} 内的成员属性和成员函数,以及结尾的分号. 类声明将类本身及其属性告诉编译器.类声明本身并不能改 ...

最新文章

  1. JavaScript变量和对象参数传值问题
  2. SQLite学习手册(临时文件)
  3. 转载--让搜索引擎优化(SEO)更有效 CSS+DIV标签命名规范
  4. 容器的访问元素的成员函数(front,back,下标和at)返回的都是引用,如果顺序容器是const的对象,那么返回的是const的引用
  5. 终极会话劫持工具SSClone
  6. 表格为一条细线的html代码,html制作细线表格的简单实例
  7. 华为2019上半年业绩发布:华为手机海外销量已恢复禁令前80%的水平
  8. 【LeetCode】11. Container With Most Water 解题小结
  9. openssl校验SSL证书public key是否配对
  10. 常见掌握类库与工具体系图 艾提拉总结 Atitit 文档资料处理重要类库与工具体系树 Configuration yml xml jsoup  Net apache commons net
  11. 在SOUI里使用真窗口时使用SOUI的滚动条
  12. MAC中文输入法消失
  13. flea-cache使用之Redis集群模式接入
  14. Coursera | Andrew Ng (01-week-2-2.6)—更多导数的例子
  15. php excel下载打不开了,php下载excel无法打开的解决方法_PHP教程
  16. 正则环视(零宽度断言)
  17. 正大国际期货:智星在线交易平台是什么?提供哪些交易执行模式和订单类型?
  18. WordCount 详解
  19. Oracle 查询技巧与优化(二) 多表查询
  20. Qt打包成setup.exe安装包

热门文章

  1. C# 读取ini文件 百度问问学习文档
  2. 快速在PowerPoint文档中添加图表
  3. DSP平台实现图像识别算法总体来说不如嵌入式?
  4. leetcode算法题--打家劫舍II
  5. 输出表格_做造价不会编工程量清单?276个造价表格同步输出,告别晚加班
  6. 查看/清除 本地电脑/浏览器缓存?
  7. c# enum 解析
  8. Android Stuido启动提示No JVM installation found.Please install a 32-bit JDK....
  9. List-----Array
  10. AndroidMainifest标签说明2——lt;activitygt;