C++接口的定义用一个实例说明 [转]
接口是一个没有被实现的特殊的类,它是一系列操作的集合,我们可以把它看作是与其他对象通讯的协议。C++中没有提供类似interface这样的关键 字来定义接口,但是Mircrosoft c++中提供了__declspec(novtable)来修饰一个类,来表示该类没有虚函数表,也就是虚函数都是纯虚的。所以利用它我们依然可以定义一 个接口。代码例子如下:
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接口等价于下面的定义:
{
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++接口的定义用一个实例说明 [转]相关推荐
- java中接口的定义与实现
1.定义接口 使用interface来定义一个接口.接口定义同类的定义类似,也是分为接口的声明和接口体,当中接口体由常量定义和方法定义两部分组成.定义接口的基本格式例如以下: [修饰符] in ...
- 匿名内部类探究——它是一个实例
目录 我的学习过程 匿名内部类概述 匿名内部类探究 代码验证(匿名内部类是一个实例) 结论 我的学习过程 昨天想学习一下Java8新特性,看到Lambda表达式可以替代匿名内部类.我对匿名内部类不太理 ...
- java 抽象封装多态_java面向对象(封装,继承,多态,抽象,接口的定义和实现)...
1.封装 在面向对象程式设计方法中,封装(英语:Encapsulation)是指,一种将抽象性函式接口的实作细节部份包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定 ...
- 11,外观模式(Facade Pattern)是为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。...
Facade模式也叫外观模式,是由GoF提出的23种设计模式中的一种.Facade模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单的界面.这个一致的简单的界面被称作facade. ...
- 设计一个接口, 并设计一个实现类实现该接口,演示它们的使用。具体,创建一个名称为Person的接口,在接口中定义两个方法sayHello()和sayBye()。
设计一个接口, 并设计一个实现类实现该接口,演示它们的使用. 具体,创建一个名称为Person的接口,在接口中定义两个方法sayHello()和sayBye().然后,创建两个实现了Person接口的 ...
- 假设 A 类有如下定义,设 a 是 A 类的一个实例,下列语句调用哪个是错误的?()
假设A类有如下定义, 设a是A类的一个实例, 下列语句调用哪个是错误的?() public class A{public int i;static String s;void method1(){}s ...
- java语言中修饰一个常量_接口中定义一个常量所用的修饰符有: (5.0分)_学小易找答案...
[判断题]Java中的接口不允许被继承 (5.0分) [单选题]下列程序的输出结果是( ) public class Ex_36{ public static void main(String arg ...
- 定义一个Dog类,包括体重和年龄两个数据成员及其成员函数,声明一个实例dog1,体重5,年龄10,使用I/O流把dog1的状态写入磁盘文件。再声明一个实例dog2,读取文件dog1的状态给dog2。
定义一个Dog类,包括体重和年龄两个数据成员及其成员函数,声明一个实例dog1,体重5,年龄10,使用I/O流把dog1的状态写入磁盘文件.再声明一个实例dog2,通过读取文件dog1的状态赋给dog ...
- C++ 笔记(16)— 类和对象(类定义、类实例对象定义、访问类成员、类成员函数、类 public/private/protected 成员、类对象引用和指针)
1. 类的定义 类定义是以关键字 class 开头,后跟类的名称.并在它后面依次包含类名,一组放在 {} 内的成员属性和成员函数,以及结尾的分号. 类声明将类本身及其属性告诉编译器.类声明本身并不能改 ...
最新文章
- JavaScript变量和对象参数传值问题
- SQLite学习手册(临时文件)
- 转载--让搜索引擎优化(SEO)更有效 CSS+DIV标签命名规范
- 容器的访问元素的成员函数(front,back,下标和at)返回的都是引用,如果顺序容器是const的对象,那么返回的是const的引用
- 终极会话劫持工具SSClone
- 表格为一条细线的html代码,html制作细线表格的简单实例
- 华为2019上半年业绩发布:华为手机海外销量已恢复禁令前80%的水平
- 【LeetCode】11. Container With Most Water 解题小结
- openssl校验SSL证书public key是否配对
- 常见掌握类库与工具体系图 艾提拉总结 Atitit 文档资料处理重要类库与工具体系树 Configuration yml xml jsoup Net apache commons net
- 在SOUI里使用真窗口时使用SOUI的滚动条
- MAC中文输入法消失
- flea-cache使用之Redis集群模式接入
- Coursera | Andrew Ng (01-week-2-2.6)—更多导数的例子
- php excel下载打不开了,php下载excel无法打开的解决方法_PHP教程
- 正则环视(零宽度断言)
- 正大国际期货:智星在线交易平台是什么?提供哪些交易执行模式和订单类型?
- WordCount 详解
- Oracle 查询技巧与优化(二) 多表查询
- Qt打包成setup.exe安装包
热门文章
- C# 读取ini文件 百度问问学习文档
- 快速在PowerPoint文档中添加图表
- DSP平台实现图像识别算法总体来说不如嵌入式?
- leetcode算法题--打家劫舍II
- 输出表格_做造价不会编工程量清单?276个造价表格同步输出,告别晚加班
- 查看/清除 本地电脑/浏览器缓存?
- c# enum 解析
- Android Stuido启动提示No JVM installation found.Please install a 32-bit JDK....
- List-----Array
- AndroidMainifest标签说明2——lt;activitygt;