2013-12-12 138 views
0

我想寫一個可用於計算的多項式類。Qt超載運算符

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 

同爲+和 -

是這甚至可能嗎?它可以讓我用同樣的方式計算的多項式與雙打

在此先感謝

+0

你可以清理你的問題了一點點。我假設它應該是多項式p(「3 * x^2 + x^1 -1」);而不是多項式p(3 * x^2 + x^1 -1);你也想要p = p * 2 //這個工程還是p = p * a //這個工作?它很難告訴你問什麼 – 8bitwide

+1

我想這應該回答你的問題 [二進制Multiplacation運營商(StackOverflow上)] [1] [1]:http://stackoverflow.com/questions/10354886 /簡單-C-如何對過載的乘法算子那麼該-floatmyclass安 – 8bitwide

回答

1

你的運營商只到你讓他們定義的一個方向。當你的班級站立時,你的左邊總是一個Polynomial,它不適用於double*Polynomial,其中double在左邊。

由於多項式乘法是可交換的(我認爲這是這個詞...... 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 
} 

這將需要在雙象左手邊並將其應用爲好像它是右手邊一樣。

從這個答案改編:https://stackoverflow.com/a/15741776/1124529

鏈接的答案也解釋了一些關於做操作,如果操作是不可交換的。