myclass
to klasa C ++ napisana przeze mnie i kiedy piszę:
myclass x;
cout << x;
Jak wyprowadzić 10
lub 20.2
, jak integer
lub float
wartość?
Odpowiedzi:
Zwykle przez przeciążenie operator<<
dla Twojej klasy:
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
zamiast myclass const &m
?
const
po rodzaju, to mówi: m is a reference to a const myclass
. Z tym przed typem mówi, że "m jest odniesieniem do stałej myclass", która znajduje się na nierównej krawędzi między bezsensownym a naprawdę niegramatycznym.
Musisz przeciążać <<
operatora,
std::ostream& operator<<(std::ostream& os, const myclass& obj)
{
os << obj.somevalue;
return os;
}
Następnie, kiedy to zrobisz cout << x
(gdzie x
jest typu myclass
w twoim przypadku), wypisze wszystko, co powiesz mu w metodzie. W przypadku powyższego przykładu byłby to x.somevalue
członek.
Jeśli typu elementu członkowskiego nie można dodać bezpośrednio do elementu członkowskiego ostream
, należy również przeciążyć <<
operator dla tego typu przy użyciu tej samej metody, co powyżej.
to bardzo proste, po prostu zaimplementuj:
std::ostream & operator<<(std::ostream & os, const myclass & foo)
{
os << foo.var;
return os;
}
Musisz zwrócić odniesienie do os, aby połączyć outpout w łańcuch (cout << foo << 42 << endl)
Alternatywny:
struct myclass {
int i;
inline operator int() const
{
return i;
}
};
myclass
ma jakieśprivate
pola i chceszoperator<<()
je wypisać,myclass
powinieneś zadeklarowaćstd::ostream& operator<<(std::ostream&, myclass const&)
jako znajomego.