myclass là một lớp C ++ do tôi viết và khi tôi viết:
myclass x;
cout << x;
Làm cách nào để xuất ra 10hoặc 20.2, giống như một integerhoặc một floatgiá trị?
Câu trả lời:
Điển hình là do quá tải operator<<cho lớp của bạn:
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 &mthay vì myclass const &m?
constsau khi loại, nó nói: m is a reference to a const myclass. Với nó trước khi các loại, nó nói "m là một tham chiếu đến một const` myclass, mà là ngay trên mép rách rưới giữa vô nghĩa và thật sự sai ngữ pháp.
Bạn cần quá tải <<toán tử,
std::ostream& operator<<(std::ostream& os, const myclass& obj)
{
os << obj.somevalue;
return os;
}
Sau đó, khi bạn thực hiện cout << x( trong trường hợp của bạn xlà loại nào myclass), nó sẽ xuất ra bất cứ điều gì bạn đã nói với nó trong phương thức. Trong trường hợp của ví dụ trên, nó sẽ là x.somevaluethành viên.
Nếu loại thành viên không thể được thêm trực tiếp vào an ostream, thì bạn cũng cần phải nạp chồng <<toán tử cho loại đó, sử dụng phương pháp tương tự như trên.
nó rất dễ dàng, chỉ cần thực hiện:
std::ostream & operator<<(std::ostream & os, const myclass & foo)
{
os << foo.var;
return os;
}
Bạn cần trả về một tham chiếu đến hệ điều hành để chuỗi outpout (cout << foo << 42 << endl)
Thay thế:
struct myclass {
int i;
inline operator int() const
{
return i;
}
};
myclasscó bất kỳprivatetrường nào và bạn muốnoperator<<()xuất chúng,myclassnên khai báostd::ostream& operator<<(std::ostream&, myclass const&)là bạn.