流<<运算符过载
Overload ostream << operator
我想知道是否有可能在需要以两种特定方式打印类中的对象时重载<< operator
。
例如,我正在构建一个多米诺骨牌游戏,所以我需要打印带有数字的多维数据集:[1][6][6][3]
并打印计算机立方体:[ ][ ]
这里有一个重载提取和插入运算符的例子:
/*
Operator: <<
This insertion operator outputs the data members of
class object instantiation in the format:(x,y)
The returning type ostream&, allows
you to chain more then one objects to be printed.
*/
ostream& operator<< (ostream& os, class_name& object_name) {
return os << '(' << object_name.get_data_memberx()
<< ',' << object_name.get_data_membery()
<< ')';
}
/*
Operator: >>
This extraction operator creates an input stream it
inserts to it values for of all the data members of
the class passed by reference and returns it.
Input format: (x,y)
*/
istream& operator>> (istream& is, class_name& object_name) {
char par1, comma, par2;
double x, y;
is >> par1 >> x >> comma >> y >> par2;
// check if any input
if(!is) return is;
// check for valid input format
if (par1 != '(' || comma != ',' || par2 != ')') {
// set failbit to indicate invalid input format
is.clear(ios_base::failbit);
return is;
}
// assign input values to second argument
object_name = class_name(x,y);
return is;
}
您可以使用上面的示例并修改格式以匹配所需的结果。
虽然其他人已经回答了如何重载operator<<
,但还不清楚如何使用两种不同的格式。我建议这样做:临时对象。
struct showdomino {
domino& d;
};
std::ostream& operator<<(std::ostream& out, showdomino dom)
{return out << '[' << dom->d.number << ']';}
struct hidedomino {};
std::ostream& operator<<(std::ostream& out, hidedomino dom)
{return out << "[ ]";}
然后用法大致如下:
if (show_it)
std::cout << showdomino{d} << 'n';
else
std::cout << hidedomino{} << 'n';
<用于cout的运算符实际上是被重载以获得这种行为的逐位左移位运算符。
我真的不明白你到底想要实现什么(一个代码片段会很有帮助)。但是,你似乎想让<lt;用于ostream和YourClass类型。你可以有这样的东西:
void operator<<(ostream str, YourClass cls) {
// generate required output
}
请注意,这是一个常规函数,只是调用语法不同。
相关文章:
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 如何显式调用运算符<<
- 为什么COUT在朋友函数中不起作用,该功能超载了操作员&lt;&lt;这是一个iStream运算符
- C++运算符<<调用::ostream而不是std::osttream
- BOOST ::变体无法解决运算符&lt;&lt;对于STD :: Ostream
- 过载输出<<用于类的运算符,以打印其中的元组
- C++ostream:没有运算符匹配<<&应在'&'代币
- 重载运算符<<:此运算符函数的参数太多
- C++继承运算符<<
- 重载运算符<<用于模板类.即使使用好友关键字也无法获得私人会员
- 如何过载<<用于YAML::Emitter的运算符,以序列化包含另一个自定义类的向量的自定义类
- 为什么字符串流运算符<<擦除原始值
- 关于使用运算符<<为新手提供C++中的模板
- 我已经完成了<<运算符重载,但它'It’不起作用
- 重载运算符<<输出地址而不是数据成员
- 错误:没有匹配'运算符<<"在'std::cout
- 重载运算符<<用于ostream语法
- 当运算符<存在时,为什么要定义 LT?
- log4cxx访问异常,使用<<运算符和宏
- 重载<<运算符错误C2804:二进制'运算符<<'参数太多