error报错, 编译期的方法是额外分出细化的基类, 然后让特定的方法只在特定的基类中有对应的虚函数可重写(覆盖)
33 避免遮掩继承而来的名称
当一个名称同时在小作用域和大作用域中存在时, C++会进行遮掩..., 如果进行了重写, 合理方法就是重写基类所有同名对应函数, 否则可以如下图通过在public域中用using将基类的名称重新提出才能得到想要的部分重写效果:
如果遮掩本身即是程序需要达到的效果,..., 令用户只修改核心部分, 但利用总的接口来使用
NVI手法需要允许用户修改私有的虚函数, 这恰好是C++中"派生类可以重新定义继承来的私有虚函数, 因为继承而来的虚函数与基类无关"这个特性的应用
当派生类需要使用基类的一些内容时虚函数也会被写为...继承实际上同样表示has-a/is-implemented-in-terms-of关系, 意味着我们只需要继承基类的实现而无需对应的接口, 只能通过重新定义基类的虚函数来使用对应的实现
但是private..., 只和重载一样和名称与参数有关, 所以很容易二义
更复杂的情况是下图的"菱形继承":
菱形继承中, 对于不同基类都拥有的同名成员, C++默认会复制多份以供使用, 如果不希望复制就应该使用虚继承,