gpt4 book ai didi

c++ 双向简单运算符重载

转载 作者:行者123 更新时间:2023-11-28 00:08:46 26 4
gpt4 key购买 nike

所以我试图重载运算符*,这样两种方式都可以工作:

Myclass * a;
a * Myclass;

当我声明这个函数时一切顺利:

Polynomial operator*(const double d);

但是当我尝试像这样从另一个方向去做时:

Polynomial operator*(Polynomial &, const double d)

我收到一个错误:“此运算符函数的参数过多。”

我做错了什么?

谢谢!

最佳答案

当您将二元运算符重载为成员函数时,类实例始终是左侧运算符,函数的参数是右侧运算符,您无法对其进行任何更改。如果您想继续使用仅限成员的功能,则不会。

但是如果你使用全局非成员函数,你可以很容易地得到任何你想要的顺序。例如

class Polynomial { ... };

// Function that allows poly * 12.34
Polynomial operator*(const Polynomial& lhs, const double rhs)
{
...
}

// Function which allows 12.34 * poly
Polynomial operator*(const double lhs, const Polynomial& rhs)
{
...
}

如果您不想在两个函数中重新实现相同的代码,并且运算符是 commutative (就像乘法和加法一样)然后你可以通过调用另一个函数来实现其中一个函数:

Polynomial operator*(const Polynomial& lhs, const double rhs)
{
...
}

Polynomial operator*(const double lhs, const Polynomial& rhs)
{
return rhs * lhs; // Calls the operator function above
}

当然,以Polynomial对象为左边的运算符当然可以实现为成员函数。


相关说明,如果您已将运算符实现为成员函数,例如

class Polynomial
{
...

Polynomial operator*(const double rhs)
{
...
}
};

下面的代码

Polynomial poly1(...);
Polynomial poly2 = poly * 12.34;

等于

Polynomial poly1(...);
Polynomial poly2 = poly.operator*(12.34);

关于c++ 双向简单运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34106558/

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