Effective c++ 条款41:了解隐式接口和编译期多态

1、对classes而言接口是显式的,以函数签名为中心,多态则是通过virtual函数发生于运行期

面向对象编程世界总是以显式接口(explicit interfaces)和运行期多态(runtime polymorphism)解决问题。通常显式接口由函数的签名式(也就是函数名称、参数类型、返回类型)构成。而对virtual函数的调用则表现出运行期多态,也就是说将于运行期根据w的动态类型决定究竟调用哪一个函数。

2、对template参数而言,接口是隐式的,奠基于有效表达式,多态则通过template具现化和函数重载解析发生于编译期

templates及泛型编程的世界中,隐式接口和编译期多态显得更为重要。
在代码中涉及T类型的w对象的一组有效的表达式便是T必须支持的一组隐式接口;而以不同的templates参数具现化function templates会导致调用不同的函数,便是所谓的编译器多态。
对于操作符重载,假设operator接受一个类型为X的对象和一个类型为Y的对象,operator的不一定需要取得一个类型为X的参数不可,它也可以取得类型T的参数,只要存在一个隐式转换能够将类型T的对象转换为类型X的对象,这样就可以有效调用operator。

加诸于template参数身上的隐式接口,就像加诸于class对象身上的显示接口一样真实,而且两者都在编译期完成检查。就像你无法以一种“与class提供的显式接口矛盾”的方式来使用对象(代码将通不过编译),你也无法在template中使用“不支持template所要求的隐式接口”的对象(代码一样通不过编译)。

你可能感兴趣的:(effective,c++笔记)