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ść?
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;
}
myclass
ma jakieśprivate
pola i chceszoperator<<()
je wypisać,myclass
powinieneś zadeklarowaćstd::ostream& operator<<(std::ostream&, myclass const&)
jako znajomego.const myclass &m
zamiastmyclass 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
(gdziex
jest typumyclass
w twoim przypadku), wypisze wszystko, co powiesz mu w metodzie. W przypadku powyższego przykładu byłby tox.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.źródło
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)
źródło
Alternatywny:
struct myclass { int i; inline operator int() const { return i; } };
źródło