2014-02-05 63 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++程序中执行重载版本。