2014-02-05 97 views
2

我從來沒有使用操作符重載前,我的任務之一,它說:C++我應該重載操作符嗎?

「使用多態僅作爲適當的一般規則是,如果一個內置的運營商成員函數的 目的相匹配,那麼它應該。超載「。

我已經設法讓兩個版本都能正常工作,我認爲ApplyFilter的第二個版本更好。但通過使用運算符重載,它是否會讓代碼更難讀?

非重載

int TheFilter::ApplyFilter(TheData& dataIn, TheData& dataOut) { 
    // other stuff here. 
    for (int i = 0; i < dataOut.length(); i++) { 
     dataOut.set_values(i, 0); 
     for (int j = 0; j < length(); j++) { 
      dataOut.set_values(i, (dataOut.get_values(i) 
          + (dataIn.get_values(i+j) * get_values(j)))); 
     } 
    } 
} 

重載

int TheFilter::ApplyFilter(const TheData& dataIn, TheData& dataOut) { 
    // other stuff here 
    for (int i = 0; i < dataOut.length(); i++) { 
     dataOut[i] = 0; 
     for (int j = 0; j < length(); j++) { 
      dataOut[i] += dataIn[i+j] * values[j]; 
     } 
    } 
    return OK; 
} 

編輯 - 我是使用重載的版本數據類!

class TheData { 
    public: 
     int length() 
     double& operator[] (int index); 
     const double& operator[] (int index) const; 
     void print(); 
     void resize(int); 

    private: 
     std::vector<double> values; 
     bool valid; 
}; 
+2

這取決於'data'類... – yizzlez

+0

這裏是運算符重載的基本規則是在C++中嗎? [基本規則重載操作符](http://stackoverflow.com/questions/4421706/operator-overloading/4421708#4421708) – KRUKUSA

回答

0

重載版本更乾淨直觀。非重載更爲詳細。對於這些東西,我認爲這不是一種「正確的方式」。不過,我會在C++程序中執行重載版本。