整数配列を保持するクラスArrayを作成しました。 main関数では、mainで宣言された配列の場合と同様に[]を使ってArrayの配列の要素を取得しようとしています。私は次のコードのように演算子[]をオーバーロードしました。私は主から、これら二つの機能を呼び出すしようとする最初の機能は、左辺値と第二の右辺値(コンストラクタおよび他のメンバ関数が図示されていない。)しかしlvalueとrvalueのC++演算子のオーバーロード
#include <iostream>
using namespace std;
class Array {
public:
int& operator[] (const int index)
{
return a[index];
}
int operator[] (const int index) const
{
return a[index];
}
private:
int* a;
}
を返し、最初の機能があってもアクセスされます変数は左辺値として使用されません。 lvalue関数を使用するだけですべてが処理できれば、rvalueのための別の関数を作成することはできません。
次のコードは、私が使用した主な機能である(オペレータ< <が適切にオーバーロードされている。):
#include "array.h"
#include <iostream>
using namespace std;
int main() {
Array array;
array[3] = 5; // lvalue function called
cout << array[3] << endl; // lvalue function called
array[4] = array[3] // lvalue function called for both
}
は、私は右辺値関数を呼び出すことができる方法はありますか?左辺と右辺の両方の関数を定義する必要もありますか?
おそらく、演算子は 'Array'ではなく' int& 'と' const int& 'を返すと宣言されるべきです。 –
はい、そうです。私の悪い – HelperKing