OOP编程与类属编程(generic programming)的一大区别:
1> OOP使用显式的接口和运行时多态
2> 类属编程使用隐式接口和编译时多态
当你看到上面的代码时,你能在某个文件里找到下面的声明:
Widget支持什么函数一目了然,此之谓“显式接口”。许多函数以virtual打头,需在运行时绑定到某个实现上,此之谓“运行时多态”。
下面修改一下doProcessing函数:
可以看出,T肯定支持的有size、normalize、swap、copy ctor函数,同时也有很多不确定的因素:
1> 比如size可在T中定义,也可能继承自父类。
2> size的返回值也不见得就是int。只要其返回的类型支持operator>即可。
3> operator!=可能存在,不存在的话也可以。只要T可以转型为支持该操作符的类型即可。
...
这些不确定的因素,都是隐含的,此之谓隐式接口。有别于OOP中函数签名极为明确的特质。
因为要调用doProcessing函数,就要实例化该模板函数,那么就要确定T是什么类型。
这些不确定的因素使得doProcessing函数有了多态的性质,而所有这些不确定因素要在编译时确定下来。
所以,谓之为“编译时多态”。有别于虚函数要在运行时确定的特质。
分享到:
相关推荐
C#中对于接口的实现方式有隐式接口和显式接口两种: 隐式地实现接口成员 创建一个接口,IChinese,包含一个成员 Speak;我们创建一个类Speaker,实现接口Chinese //隐藏式实现例子 public interface IChinese { ...
文章目录接口接口的作用接口的语法实现接口实现多个接口的语法接口的扩展类型转换类型转换的概念类型转换规则隐式类型转换显式类型转换类型转换的主要应用场合类型转换的主要应用场合多态多态的概念多态的目的 接口 ...
abaqus显示和隐式算法的差别.pdf
隐式调用dll和显式调用dll,并做了demo在同一个solution下编译就可以尝试,通过宏来控制隐式和显示调用。显示调用即使dll改名依然能够获取函数地址,通过函数指针来使用。
Scala隐式转换和隐式参数.md
Item M1.指针与引用 Item M2.类型转换 Item M3.指针和数组不能使用多态 Item M4.跳过 Item M5.隐式转换 Item M6.后缀与前缀 Item M7 跳过 Item M8 new,operator new,place new Item M9 析构函数与资源泄露 Item M10 ...
显式接口实现(C# 编程指南) 并且这两个接口包含具有相同签名的成员, 那么在类中实现该成员将 如果类实现两个接口, 导致两个接口都使用该成员作为它们的实现。 例如: interface IControl ...
自己学习QT中DLL显示加载和隐式加载的Demo,相关文章链接:https://www.jianshu.com/p/2851c0f7f4a9
编译原理经典教材 目录 第一章引论 1.1什么叫编译程序 1.2编译过程概述 1.3编译程序的结构 1.3.1编译程序总框 1.3.2表格与表格管理 1.3.3出错处理 1.3.4遍 1.3.5编译前端与后端 1.4编译程序与程序设计...
C++ 多个类的DLL封装以及隐式链接和显式链接2种方法调用
显示Intent和隐式Intent的区别
为此,提出了一种基于隐式评分和相似度传递的学习资源推荐算法。首先,收集用户的学习行为;其次,改进传统的相似度计算方法,并在此基础上引入相似度传递策略;最后,应用并实现E-learning平台中学习资源的推荐。...
体系结构 经典KWIC问题 隐式调用风格 实现上没有使用Java自带的观察者,自身实现了较为简单的EventManager 附带逻辑视图、开发视图
主要为大家详细介绍了C#隐式/显示实现接口方法,接口的使用场景介绍,感兴趣的小伙伴们可以参考一下
显示Intent和隐式Intent启动Activity的示例
整理了一下关于mysql的前因后果,以及如何避免隐式提交
在隐式曲面三角网格化的过程中,扩张多边形是不断变化的,需要重复上述步骤,直至没有扩张多边形时结束。该算法分别应用于解析隐式曲面和变分隐式曲面的三角网格化。实验结果表明,该算法不需要重新网格化的步骤,...
了解JSP 隐式对象的分类和组成 能够运用隐式对象进行JSP 编程 理解Page、Request、Session 和Application 范围的区别
matlab实现隐式QR算法,其中包括了双重步位移的QR迭代算法