了解隐式接口和编译期多态

显式接口,运行期多态(面向对象编程解决问题的方式)
显式接口:我们知道它是什么样子,在源码中明确可见。
虚函数:提供运行期多态支持,根据动态类型决定调用函数。
模板和泛型编程的重点是隐式接口和编译期多态
看下面这个模板函数

   
   
  1. template<typename T>
  2. void DoSometing (T& w)
  3. {
  4. if(w. size()> 10&&w!=someNastWidge)
  5. {
  6. T temp(w);
  7. temp. normalize();
  8. temp. swap(w);
  9. }
  10. }
1.函数内w所调用的函数就是一组隐式接口。单从代码上看我们还不能确定w是什么类型。但是T必须支持这些隐式接口。
2.由于参数T的种类可以多种多样,这样,在编译期,T的具体类型的不同导致了函数体内w所调用的函数也不相同。这便是所谓的编译期多态。
3.关于编译期多态和运行期多态
编译期多态和运行期多态可以简单的理解成,一个是决定哪个重载函数该被调用(一般依据编译器的函数重命名规则来实现,发生在编译期),另一个是哪一个虚函数该被绑定(通过虚函数表和虚函数指针实现,发生在运行期,根据类中的虚函数指针来动态确定)。
4.关于显式接口和隐式接口
显式接口就是一个完整的函数签名,明确指明了函数名称,参数类型,返回值
隐式接口由一系列有效表达式组成。什么意思呢
比如这样一个表达式:
w.size()>10&&w!=someNastWidge
通过表达式来指明类型参数T具有哪些能力,这些便是隐式接口
牢记:
1.类和模板都支持接口和多态
2.对类而言,接口是显式的(explicit)。多态是通过虚函数在运行期实现。
3.模板,接口是隐式的(implicit),是基于有效表达式的。多态是通过在编译期,模板具体化和对函数重载的解析来实现。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值