私はいくつかのintの配列を含むクラスを持っています。私はoverload * operatorを使用して、すべての要素に特定の数を乗算します。クラスは非常に一般的です。それが0のインデックスを持っていないように私は返す* this
TEST one;
one[1]=5;
one[0]=-10;
one[3]=4
one = one * 2
、それを印刷し、結果の値としてそれを呼び出す
class TEST{
public:
TEST(){
size = 5;
arr = new double[size]();
}
double &operator [] (const int a){
return arr[a];
}
TEST operator *(const int a){
for(int i = 0; i < size ;i++){
arr[i] = arr[i] * a;
}
return *this;
}
private:
int size;
double *arr;
}
は、0インデックスは、常にメモリから乱数です。これはone = one * 2
の後にのみ発生します。これは*this
ですか?もしそうなら、どうして私はそれを修正できますか?
// 私はコピーコンストラクタ
TEST(const TEST &a){
size = a.size;
arr = new double;
*arr = *a.arr;
}
を宣言
TEST operator *(const int a){
TEST temp;
for(int i = 0; i < size ;i++){
temp.arr[i] = arr[i] * a;
}
return temp;
}
としておよび*宣言した、それはまだ0インデックス
これはどのようにしてコンパイルされますか?あなたの 'operator'メソッドでは、定義されていない変数' b'を使います。 –
あなたの配列を次のように宣言してください: 'double arr [5];' – worker11811
あなたは 'one [1] = 5;'に何を期待していますか?声明の最後に存在しなくなった一時的な価値の価値を変更する点は何ですか?また、あなたが本当にそれを適用するものの値を変更する '演算子*'をしたいですか?あなたには1つしかないので、なぜ「1 = 1 * 2」 - なぜ「1 * 2」だけではないのですか? –