【问题标题】:Qt overloading operators [duplicate]Qt重载运算符[重复]
【发布时间】:2013-12-12 16:43:57
【问题描述】:

我正在尝试编写一个可用于计算的多项式类。

class Polynomial
{
public:
 Polynomial(QString s); // creates  a polynomial with QRegExp
 const Polynomial operator+(Polynomial const& rhs); // NOT TESTED
    const Polynomial operator+(double d);
    const Polynomial operator-(Polynomial const& rhs); //
    const Polynomial operator-(double d);
    const Polynomial operator-();
    private:
    void resizeToMin();
    QList<int> exp;
    QList<double> coeff;
    QChar var;
};

我想像这样使用多项式:

 Polynomial p("3*x^2 + x^1 -1");
 double a = 2.0;
 p = p*2 // this works
 p = p*a // this works
 p = 2*p // DOES NOT WORK
 p = a*p // DOES NOT WORK

+ 和 - 相同

这甚至可能吗?它可以让我以与双精度相同的方式计算多项式

提前致谢

【问题讨论】:

  • 你能把你的问题清理一下吗?我认为它应该是多项式 p("3*x^2 + x^1 -1");而不是多项式 p(3*x^2 + x^1 -1);你还想要 p = p*2 // 这行得通还是 p = p*a // 这行得通???很难准确说出您的要求
  • 我认为这应该回答你的问题 [Binary Multiplacation Operator (StackOverflow)][1] [1]: stackoverflow.com/questions/10354886/…

标签: c++ operator-overloading


【解决方案1】:

您的操作员只会按照您定义的方向进行操作。正如你的班级所代表的那样,你的左侧总是一个多项式,它不适用于double*Polynomial,其中双精度在左侧。

由于多项式的乘法是可交换的(我认为这就是这个词...a*b=b*a),您可以在类之外定义这样的运算符:

Polynomial operator+(const double& lhs, const Polynomial& rhs) {
    return rhs + lhs; //switch the operation so that the polynomial is on the left hand side
}

它将把 double 作为左侧并应用它,就好像它是右侧一样。

改编自这个答案:https://stackoverflow.com/a/15741776/1124529

链接的答案还解释了一些关于如果操作不是可交换的操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-25
    • 2015-06-20
    • 2011-10-27
    • 2011-11-12
    • 2012-12-22
    • 2016-09-26
    • 2018-06-01
    • 2012-04-21
    相关资源
    最近更新 更多