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;
}
myclass
есть какие-либоprivate
поля, и вы хотитеoperator<<()
их вывести,myclass
следует объявитьstd::ostream& operator<<(std::ostream&, myclass const&)
как друга.const myclass &m
вместоmyclass const &m
?const
после того типа, он говорит:m is a reference to a const myclass
. С ним перед типом написано: «m - это ссылка на myclass const», который находится прямо на грани между бессмысленным и действительно некграмматическим.Вам нужно перегрузить
<<
оператора,std::ostream& operator<<(std::ostream& os, const myclass& obj) { os << obj.somevalue; return os; }
Затем, когда вы это сделаете
cout << x
(гдеx
is of typemyclass
в вашем случае), он выведет все, что вы ему сказали в методе. В случае приведенного выше примера это будетx.somevalue
член.Если тип члена не может быть добавлен непосредственно к элементу
ostream
, вам потребуется перегрузить<<
оператор для этого типа, используя тот же метод, что и выше.источник
это очень просто, просто реализуйте:
std::ostream & operator<<(std::ostream & os, const myclass & foo) { os << foo.var; return os; }
Вам нужно вернуть ссылку на os, чтобы связать outpout (cout << foo << 42 << endl)
источник
Альтернатива:
struct myclass { int i; inline operator int() const { return i; } };
источник