我从来没有在我的任务之前和之上使用过运算符重载:
“仅在适当时使用多态。一般规则是,如果内置运算符匹配 成员函数的目的然后它应该被重载。“
我设法让两个版本都能正常工作,我认为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;
};
答案 0 :(得分:0)
重载版本更干净直观。非重载更冗长。对于这些东西,我不认为真的有“正确的方法”。不过,我会在C ++程序中执行重载版本。