Bazı int dizisini içeren bir sınıfa sahibim. Her bir elemanı belirli bir sayı ile çarpacak şekilde aşırı yüklenmek istiyorum. Sınıf çok yaygındır. 0 dizini bulunmamaktadır gibiDönen * bu
TEST one;
one[1]=5;
one[0]=-10;
one[3]=4
one = one * 2
ve baskı, sonuç değeri olarak çağırmak
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 dizin her zaman bellekten rasgele sayı olduğu; Bu yalnızca one = one * 2
'dan sonra olur. *this
buna neden oluyor? Eğer öyleyse neden ve nasıl düzeltebilirim?
// ben kopya kurucu
TEST(const TEST &a){
size = a.size;
arr = new double;
*arr = *a.arr;
}
ilan
TEST operator *(const int a){
TEST temp;
for(int i = 0; i < size ;i++){
temp.arr[i] = arr[i] * a;
}
return temp;
}
olarak ve * bildirdikten Ve hala 0 indeksi
Bu nasıl derlenir? “Operatör” yönteminizde, tanımlanmamış bir 'b' değişkenini kullanırsınız. –
Ve neden dizininizi şu şekilde bildirmiyorsunuz: 'çift arr [5];' – worker11811
Biri ne bekliyorsunuz [1] = 5; 'yapmak için? İfadenin sonunda var olan bir geçici paranın değerini değiştirmenin amacı nedir? Ayrıca, gerçekten uyguladığınız şeyin değerini değiştiren bir operatör * istiyor musunuz? Ve sahip olduğunuzdan, neden biri = bir * 2' - neden sadece bir "2" değil? –