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&)
як друга.