2017-06-22 6 views
3

で)(演算子オーバーロード、オブジェクト上で実行し、は、C++ - 私は2次元配列を表現するクラスを持っていると私は例えば()演算子を使用したいインデックス

Array arr; 
arr(2,5) = 17; // I want to assign 17 as element in 2nd row and 5th column. 

は、私はそのような何かを試してみました:私は演算子=(この作用)を有する

void operator(int m, int n)(int num) { 
    int m, n; 
    p[m][n] = num; 
} 

(ただし、動作していない):

void operator=(const Array& other) const { 
    for (int i = 0; i < DIM; i++) { 
     for (int j = 0; j < DIM; j++) { 
      p[i][j] = other.p[i][j]; 
     } 
    } 
} 

Arrayクラス0を有しますプライベートメンバーとして私は、アレイ

で要素にアクセスする()演算子をオーバーロードすることができますどのように

はありがとうございました!

答えて

7

は、あなたが呼び出し元のサイトで、その参照によって修正することができることを、配列要素へ参照を返し

int& operator()(int m, int n)

ようなものを構築する必要があります。

あなたはconstオブジェクトの要素へのアクセスのためのコールサイトで同様の構文を使用できるようにconst過負荷

const int& operator()(int m, int n) const

を構築することを忘れないでください。 (?あなたはp mutableを行っている)


最後に、あなたの代入演算子のために、あなたはそれがconst作るべきではない、とあなたは助けるために、自己への参照を返す必要があります複合代入

Array& operator=(const Array& other){ 
    // Your existing code 
    return *this; 
} 

参考:http://en.cppreference.com/w/cpp/language/copy_assignment

+0

@クエンティン:この混乱を分類してくれてありがとう。 – Bathsheba

+1

誰かが気付く前に1時間6アップアップ。ニース:p – Quentin

+0

@クエンティン:あなたが見ているように、SOが "それは厄介になる"という批判はまったく根拠がありません。 – Bathsheba

関連する問題