目录
第一部分 语法篇
建议60:动多态与静多态
- 动多态:
- 通过继承、虚函数、指针或引用实现。
- 晚绑定
- 追求接口与实现分离,让不同的实现代码应用于相同的场合(调用相同的函数实现不同的功能)
- 静多态:
- 通过模板实现
- 早绑定
- 追求算法或代码可复用,让相同的代码应用于不同的场合
建议61:将模板的声明和定义防止在同一个头文件里
由于模板类型不是一种实类型,它必须等到类型绑定后才能确定最终类型。
编译器需要根据模板的定义去生成对应的代码。
三种解决方法,推荐方法1
:
- 将模板的定义放在
.h
文件中。缺点是会变成inline
函数,导致代码膨胀。 - 定义还是放在
.cpp
文件中,引用时,#include "xxx.cpp"
。缺点是,有的编译器不支持。 - 使用关键字
export
。缺点是,性能太次,有的编译器不支持。
export template<class T>
void output(const T& t){
std::cout << t;
}
建议62:用模板代替参数化的宏函数
因为宏定义有两个重要的缺点:缺乏类型检查、替换时容易出错。
建议63:函数模板vs.
模板函数,类模板vs.
模板类
- 函数模板:用来生产函数的模板
- 模板函数:用模板生成的函数,指由函数模板生成的具体函数
- 类模板与模板类:同上。
其实这4个名词就是几个术语而已,没什么太大意义。
建议64:继承vs.
模板
略
网友评论