【发布时间】:2019-06-12 13:28:39
【问题描述】:
我有一个基类,其中包含一个已实现的函数和一个共享名称但不共享参数的纯虚函数。我无法从派生类的实例调用基类中实现的函数。
我尝试将函数添加到派生类而不是基类并且它可以工作,但这意味着我必须将函数添加到每个派生类,而不是在基类中实现一次。 我也尝试过更改函数名称并且它有效。这似乎是由于两个重载函数之间的冲突。
template <typename T>
class Base {
public:
virtual T some_function(int x) = 0;
T some_function() {
// some code
}
}
class Derived final: public Base<int> {
int some_function() {
// some code
}
}
int main() {
Derived var = Derived();
var.some_function(3);// Compilation error
}
上面的代码没有编译,说明没有找到函数:some_function(int)。
【问题讨论】:
-
与此示例无关,但请注意
Derived var不会表现出多态性(它不会进行虚拟方法调用,而是在编译时根据静态类型解析它们) - 你需要一个指针或参考。