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 10
hoặc 20.2
, giống như một integer
hoặc một float
giá 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 &m
thay vì myclass const &m
?
const
sau 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 x
là 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.somevalue
thà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;
}
};
myclass
có bất kỳprivate
trường nào và bạn muốnoperator<<()
xuất chúng,myclass
nên khai báostd::ostream& operator<<(std::ostream&, myclass const&)
là bạn.