myclass to klasa C ++ napisana przeze mnie i kiedy piszę:
myclass x;
cout << x;
Jak wyprowadzić 10lub 20.2, jak integerlub floatwartość?
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 &mzamiast myclass const &m?
constpo 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 xjest typu myclassw twoim przypadku), wypisze wszystko, co powiesz mu w metodzie. W przypadku powyższego przykładu byłby to x.somevalueczł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;
}
};
myclassma jakieśprivatepola i chceszoperator<<()je wypisać,myclasspowinieneś zadeklarowaćstd::ostream& operator<<(std::ostream&, myclass const&)jako znajomego.