myclass benim tarafımdan yazılmış bir C ++ sınıfıdır ve yazdığımda:
myclass x;
cout << x;
Nasıl çıktı alabilirim 10veya 20.2bir integerveya bir floatdeğer gibi?
Yanıtlar:
Tipik olarak operator<<sınıfınız için aşırı yükleme yaparak:
struct myclass {
int i;
};
std::ostream &operator<<(std::ostream &os, myclass const &m) {
return os << m.i;
}
int main() {
myclass x(10);
std::cout << x;
return 0;
}
const myclass &myerine olması gerekmez myclass const &mmi?
consttürden sonra, diyor: m is a reference to a const myclass. Yazının önündeyken, "m, anlamsız ve gerçekten dramatik olmayan arasındaki düzensiz kenarda yer alan" sınıfım bir cisme atıftır "diyor.
<<Operatörü aşırı yüklemeniz gerekiyor ,
std::ostream& operator<<(std::ostream& os, const myclass& obj)
{
os << obj.somevalue;
return os;
}
Sonra bunu yaptığınızda cout << x( sizin durumunuzdaki xtürden myclass), yöntemde söylediğiniz her şeyi çıkarır. Yukarıdaki örnek durumunda x.somevalueüye olacaktır.
Üyenin türü doğrudan bir üyeye eklenemiyorsa , yukarıdaki ile aynı yöntemi kullanarak bu tür ostreamiçin <<operatörü de aşırı yüklemeniz gerekir .
çok kolay, sadece uygulayın:
std::ostream & operator<<(std::ostream & os, const myclass & foo)
{
os << foo.var;
return os;
}
Çıkışı zincirlemek için işletim sistemine bir referans döndürmeniz gerekir (cout << foo << 42 << endl)
Alternatif:
struct myclass {
int i;
inline operator int() const
{
return i;
}
};
myclassHerhangi birprivatealan varsa veoperator<<()bunların çıktısını almak istiyorsanız , arkadaş olarakmyclassbildirmeniz gerektiğini unutmayınstd::ostream& operator<<(std::ostream&, myclass const&).