3

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すべての方法であると思います。必要に応じて、コピー コンストラクターと代入コンストラクターを定義しています。

私は何を理解していませんか?ありがとう!

4

1 に答える 1