如何在结构内使操作员<<过载
How to overload the operator << inside a structure
我只想打印结构的两个值,但无法编译我的代码 - 我得到:没有运算符"<<"匹配这些操作数。
#include <iostream>
using namespace std;
struct SCoor
{
int i, j;
bool operator == (const SCoor & tmp) const
{
return (i == tmp.i && j == tmp.j);
}
bool operator < (const SCoor & tmp) const
{
return (i < tmp.i || (i == tmp.i && j < tmp.j));
}
ostream& operator << (ostream &o) {
return o << i << " " << j;
}
};
int main()
{
SCoor tmp = { 3, 3 };
cout << tmp;
return 0;
}
如何使运算符"<<"过载?
如果您希望结构位于表达式的左侧,请将<<
运算符重载为成员函数。所以:
struct SCoor
{
// ...
SCoor& operator << (Stuff const& s) {
// ...
return *this;
}
};
// ...
Stuff stuff;
SCoor scoor;
scoor << s; // insert s into my SCoor
如果要使结构成为<<
表达式的右侧,则必须定义一个独立的函数:
std::ostream& operator<<(std::ostream& os, SCoor const& scoor)
{
return os << scoor.i << " " << scoor.j;
}
但是,将外部函数设置为友元函数并在struct
定义中定义它是很常见的:
struct SCoor
{
// ...
friend std::ostream& operator<<(std::ostream& os, SCoor const& scoor)
{
return os << scoor.i << " " << scoor.j;
}
};
// ...
SCoor scoor;
std::cout << scoor << 'n';
但它不是结构的成员,只是为了方便起见,在其定义中定义。
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- ostream过载时的缓冲区冲洗
- gcc和c++17的过载解析失败
- C++Cast运算符过载
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 'max'匹配'std::function<const int &(const int &, const int &)>'无过载
- <<操作员在下面的行中工作
- 过载'operator new'如何导致无限循环?
- "Inverse SFINAE"避免模棱两可的过载
- 操作员C++的模棱两可的过载
- C++中>>操作员过载时出现问题?
- 基于返回类型的转换和过载扣除
- 没有可行的过载'='错误,可能导致这种情况的原因是什么?
- 是否存在包含负号的isdigit函数(过载)
- 过载输出<<用于类的运算符,以打印其中的元组
- 如何过载<<用于YAML::Emitter的运算符,以序列化包含另一个自定义类的向量的自定义类
- Qt过载数据流运算符<<
- c++11的特定过载<<操作人员
- 过载<<比如cout错误