如何解决在基类数组中使用Subclass方法的默认值
myfunc = function(x){
initial_result = rlang::with_handlers(
.expr = x + 1,error = ~ rlang::abort(c("you did it wrong",x = "`x` should be a number",i = "For example: `x = 2`")))
final_result = initial_result + 1
return(final_result)
}
> myfunc(a)
Error: you did it wrong
x `x` should be a number
i For example: `x = 2`
Run `rlang::last_error()` to see where the error occurred.
可以代替5吗?
cout << a[0]->function();
解决方法
您的代码正在通过function()
指针调用Basis*
,因此它将使用Basis
定义的默认值,Sub
无法覆盖那。通过function()
指针调用Sub*
将使用Sub
定义的默认值。
因此,考虑到您所显示的代码,我想到要执行的操作的最简单方法就是使用函数重载,例如:
class Basis
{
public:
virtual int function() { return function(1); }
virtual int function(int i) { return 2; }
};
class Sub : public Basis
{
public:
int function() override { return function(5); }
int function(int i) override { return i; }
};
int main()
{
Basis* a[2];
a[0] = new Basis();
a[1] = new Sub();
cout << a[0]->function(); //gives 2
cout << a[1]->function(); //gives 5
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。