myclass це клас C ++, написаний мною, і коли я пишу:
myclass x;
cout << x;
Як вивести 10або 20.2, як значення integerабо floatзначення?
Відповіді:
Зазвичай шляхом перевантаження operator<<для вашого класу:
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замість myclass const &m?
constпісля того типу, він говорить: m is a reference to a const myclass. З ним перед типом написано: "m - це посилання на міклас const`, який знаходиться прямо на обшарпаному краю між безглуздим і по-справжньому неграматичним.
Вам потрібно перевантажити <<оператора,
std::ostream& operator<<(std::ostream& os, const myclass& obj)
{
os << obj.somevalue;
return os;
}
Тоді коли ви це зробите cout << x (де у вашому випадку xє тип myclass), воно видасть все, що ви сказали йому в методі. У випадку з наведеним вище прикладом це буде x.somevalueчлен.
Якщо тип члена не може бути доданий безпосередньо до ostream, тоді вам доведеться також перевантажити <<оператор для цього типу, використовуючи той же метод, що і вище.
це дуже просто, просто впровадьте:
std::ostream & operator<<(std::ostream & os, const myclass & foo)
{
os << foo.var;
return os;
}
Вам потрібно повернути посилання на os, щоб ланцюжок виводу (cout << foo << 42 << endl)
Альтернатива:
struct myclass {
int i;
inline operator int() const
{
return i;
}
};
myclassє якісьprivateполя, і ви хочетеoperator<<()їх вивести,myclassслід оголоситиstd::ostream& operator<<(std::ostream&, myclass const&)як друга.