(name-hiding), 至于这两个名称类型是否相同并不被考虑
这是非常危险的特性, 如下图派生类中的mf3函数会将基类的两个mf3一起进行遮掩, 无论基类那两个函数类型和形式是什么样的
因此对于公有继承来说..., 令用户只修改核心部分, 但利用总的接口来使用
NVI手法需要允许用户修改私有的虚函数, 这恰好是C++中"派生类可以重新定义继承来的私有虚函数, 因为继承而来的虚函数与基类无关"这个特性的应用
当派生类需要使用基类的一些内容时虚函数也会被写为..., 只和重载一样和名称与参数有关, 所以很容易二义
更复杂的情况是下图的"菱形继承":
菱形继承中, 对于不同基类都拥有的同名成员, C++默认会复制多份以供使用, 如果不希望复制就应该使用虚继承,...的双重意义
typename一般出现在模板参数中作为参数前缀, 在这种情况下typename和class是等价的(但是typename较晚推出, 建议使用语义更清晰的typename)
当一个模板中某个名称依赖于模板参数时...核心手法和简化普通函数相同, 就是将模板操作中不变的部分抽离出来, 独立成尽可能与模板无关代码, 通过指针之类的方法进行连接使用
但是简化的时候也要注意有些时候抽离得越复杂, 副作用就越多, 所以要形成效率与安全性之间的取舍