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 - это ссылка на myclass const», который находится прямо на грани между бессмысленным и действительно некграмматическим.
Вам нужно перегрузить <<
оператора,
std::ostream& operator<<(std::ostream& os, const myclass& obj)
{
os << obj.somevalue;
return os;
}
Затем, когда вы это сделаете cout << x
(где x
is of type myclass
в вашем случае), он выведет все, что вы ему сказали в методе. В случае приведенного выше примера это будет 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;
}
};
myclass
есть какие-либоprivate
поля, и вы хотитеoperator<<()
их вывести,myclass
следует объявитьstd::ostream& operator<<(std::ostream&, myclass const&)
как друга.