虚函数重载(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
");
	}
};


int main(){
	derived mem;
	mem.foo();
}

于是解决办法有:
1. 新加一个基类具体方法,在具体方法里调用纯虚函数
2. 新加一个基类抽象方法,在子类重写方法里调用虚函数

结果

第一个方法失败,子类实例找不到基类的方法,很奇怪
第二个方法必须将重载函数定义在头文件里才行,如上面的示例代码, 定义在源文件里时,子类重载函数找不到重写方法。

所以目前模板函数需要定义在头文件里, 虚函数重写互调时也需要定义在头文件里了

原文地址:https://www.cnblogs.com/hustcpp/p/11736943.html