2016-11-25 12 views
7

Ben bir sınıf uygulamak zorunda çok boyutlu vektör koordinatlarını ayarlar ve (Bu kısmı değiştiremezsiniz) bu özel kod ile çağrıldığında çalışacak Vektör:Çoklu nokta operatörü (C++ sınıfı)

(1,1, 1.2, 1.3, 1.4, 1,5)

Bu ne olduğu:

const int NumOfDimensions = 5; 
    Vector x (NumOfDimensions); 
    x.Set(0, 1.1).Set(1, 1.2).Set(2, 1.3).Set(3, 1.4).Set(4, 1.5); 
    x.print(); 

ve çıkış böyle olmak zorunda Denedim ama işe alamadı:

class Vector { 
float *coordinates; 
int dimensions; 

public: 
Vector(int k) 
{ 
coordinates = new float[k]; 
dimensions = k; 
} 
void Set(int k, float wsp) 
{ 
    //Vector x(k+1); 
    coordinates[k] = wsp; 
    //return x; 
} 
void print() 
{ 
    int i; 
    cout<<"("; 
    for(i=0; i<dimensions; i++) 
    cout<<coordinates[i]<<", "; 
    cout<<")"<<endl; 
} 
}; 

Yani fonksiyonunu bir nesne değiştirilmesi gerekir ve muhtemelen dönmek Set biliyorum ama farklı birçok yöntem denedim ve sadece çalışmaz. Nasıl değiştirmeliyim? Eğer bu tür zincir yöntemlerine edebilmek istiyorsanız

cevap

12

Eğer başvuru döndürmek gerekir:

Vector& Set(int k, float wsp) { 
    // ... 

    return *this; 
} 

Ben iddia ediyorum bu Python, Ruby gibi diğer dillerde olduğu bir sürü görmek rağmen ve bu arayüz çok C++ değil.

listenize coordinates, C tarzı diziler beladan başka bir şey değildir saklamak için std::vector kullanarak daha iyi olurdu. Bu kod aslında delete[] ile ayrılmadığınız için ciddi bir bellek sızıntısına sahiptir, tanımlanmış hiçbir yok edici yoktur. Bir Standart Kitaplık kabı kullanmak bu sorumluluğu ortadan kaldırır.

bunu daha doğal C++ sizin için yapar print denilen bir aksak yöntem olmasının yerine doğrudan o kadar basitçe cout bu dökümü birformatlayıcıyı tanımlamaktır için yapabileceğimiz başka şey:

std::ostream& operator<<(std::ostream& stream, const Vector& vec); 

Bu biçimlendiricinin yalnızca cout değil, herhangi bir akışta kullanılmasına izin verilecektir.

+0

Teşekkür ederiz! işe yarıyor, bunun için 2 saat israf ettim ve sonra 1 dakika sonra cevap var inanamıyorum. – mushisgosu

+0

Bu, C++ 'da kullanmak için alışılmadık bir modeldir; – tadman

+1

@mushisgosu cevabınız problemi çözdüyse, kabul edildi olarak işaretlemelisiniz. –