/*条款41:了解隐式接口和编译期多态*/
// 重载函数(编译期多态)虚函数绑定(运行期多态)
//类和模板都支持接口和多态,对于类而言接口是显式的,以函数签名为中心,多态则是通过虚函数发生于生运行期
// 对于模板而言接口是隐式的,奠基于有效表达式,多态则是通过模板卡具现化和函数重载解析发生于编译期
#include<iostream>
using namespace std;
class Widget {
public:
Widget();
virtual ~Widget();
virtual size_t size()const;
virtual void normalize();
void swap(Widget&other);
};
//范例一
void doProcessing(Widget&w) {// w必须支持widget接口 显式接口
if (w.size()/*多态:运行时决定调用哪个虚函数*/ > 10 && w != someNastyWidget) {
Widget temp(w);
temp.normalize();
temp.swap(w);
}
}
//范例二
template<typename T>
void doProcessing(T&w) {//这里的w必须支持size,normalize swap成员函数,拷贝构造函数(建立temp)不等比较 相当于隐式接口implicit,这里的以不同的template参数具现化函数模板,会导致调用不同的函数,这就是所谓的编译期多态
if (w.size() > 10 && w != someNastyWidget) {
T temp(w);
temp.normalize();
temp.swap(w);
}
}
int main() {
}
条款41:了解隐式接口和编译期多态
最新推荐文章于 2025-01-22 23:50:48 发布