Item 41 隐式接口和编译时多态

本文探讨了面向对象编程(OOP)与泛型编程之间的关键区别,主要聚焦于显式与隐式接口的概念,以及运行时多态与编译时多态的不同实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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函数有了多态的性质,而所有这些不确定因素要在编译时确定下来。
所以,谓之为“编译时多态”。有别于虚函数要在运行时确定的特质。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值