gpt4 book ai didi

C++ 重载 >> 运算符基于 >> 的哪一侧具有不同的交互

转载 作者:行者123 更新时间:2023-12-05 08:46:07 26 4
gpt4 key购买 nike

我想知道是否有可能以这种方式重载 C++ >> 运算符

Account& operator>> (double left, Account &right)
{
right.deposit(left);
return right;
}

Account& operator>> (Account &left, double right)
{
left.withdraw(right);
return left;
}

我想知道 >> 运算符是否具有此功能所以我可以做这样的事情

account1 >> 200 >> account2

从第一个账户中取出 200,然后将其存入第二个账户。

最佳答案

如前所述,由于以下简单原因,这是行不通的:

account1 >> 200 ...

当它被评估时,这最终会调用以下重载:

Account& operator>> (Account &left, double right)

请注意此重载返回 Account & 的事实.那是在那里白纸黑字宣布的。让我们继续:

... >> account2

现在,这个 operator>> 的左侧现在是 Account & ,重载返回了什么。它不是 double了。它必须是 double为了让另一个重载收拾残局,把它带回家。这就是重载运算符在 C++ 中的工作方式。

最简单的解决方案可能是简单地从第一个重载返回一个 double 值:

double operator>> (Account &left, double right)
{
left.withdraw(right);
return right;
}

现在这个表达式的结果是 double值,这将更容易让另一个重载 operator>>进入画面。

关于C++ 重载 >> 运算符基于 >> 的哪一侧具有不同的交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70490249/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com