虚函数重载(overwrite) 继承覆盖问题
引言
类接口需要添加默认参数,以适应不同情况调用, 但是clang-tidy 不允许在接口上设置默认参数,ps: 可能担心继承类里接口重新设置新默认参数而导致误用的情况
#include <stdio.h>
struct base{
virtual void foo() = 0;
virtual void foo(int)=0;
virtual ~base(){}
};
struct derived:public base{
void foo() {
foo(1);
}
void foo(int){
printf("asads\n");
}
};
int main(){
derived mem;
mem.foo();
}
于是解决办法有:
1. 新加一个基类具体方法,在具体方法里调用纯虚函数
2. 新加一个基类抽象方法,在子类重写方法里调用虚函数
结果
第一个方法失败,子类实例找不到基类的方法,很奇怪
第二个方法必须将重载函数定义在头文件里才行,如上面的示例代码, 定义在源文件里时,子类重载函数找不到重写方法。
所以目前模板函数需要定义在头文件里, 虚函数重写互调时也需要定义在头文件里了