微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在基类数组中使用Subclass方法的默认值

如何解决在基类数组中使用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 举报,一经查实,本站将立刻删除。