myclass
benim tarafımdan yazılmış bir C ++ sınıfıdır ve yazdığımda:
myclass x;
cout << x;
Nasıl çıktı alabilirim 10
veya 20.2
bir integer
veya bir float
değ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 &m
yerine olması gerekmez myclass const &m
mi?
const
tü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 x
tü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 ostream
iç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;
}
};
myclass
Herhangi birprivate
alan varsa veoperator<<()
bunların çıktısını almak istiyorsanız , arkadaş olarakmyclass
bildirmeniz gerektiğini unutmayınstd::ostream& operator<<(std::ostream&, myclass const&)
.