2次元配列を提供するように設計されたカスタム クラスがあります。オペレーターを過負荷にしました+
が、予想していなかった奇妙な結果が得られました。ここにコピーコンストラクタと代入コンストラクタがあります:
Array<T, ROW, COL>& operator=(const Array<T, ROW, COL> &rhs) {
if (this != &rhs) {
// allocate new memory
T *newData = new T[ROW * COL];
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
newData[j*ROW + i] = rhs(i, j);
}
}
data = newData;
}
return *this;
}
そして、ここに私のオーバーロードされた+
演算子があります:
inline Array<T, ROW, COL> &operator+(const Array<T, ROW, COL> &rhs) {
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
this->data[j*ROW + i] += rhs(i,j);
}
}
return *this;
}
のセクションは次のmain
とおりです。
Array<double, 10> ten;
ten.fill(10.0); // fill with tens
Array<double, 10> result = ten + ten + ten + ten;
std::cout << result << std::endl;
収量:
[0]: 80
[1]: 80
[2]: 80
[3]: 80
[4]: 80
[5]: 80
[6]: 80
[7]: 80
[8]: 80
[9]: 80
これは私には意味がありません。私は結果が40
すべての方法であると思います。必要に応じて、コピー コンストラクターと代入コンストラクターを定義しています。
私は何を理解していませんか?ありがとう!