我想知道是否有可能过载<< operator
需要以两种方式在类中打印对象。Overload ostream <<运算符
例如,我建立一个多米诺骨牌的游戏,所以我需要打印我的立方体与数字:[1][6][6][3]
和打印电脑多维数据集:[ ][ ]
我想知道是否有可能过载<< operator
需要以两种方式在类中打印对象。Overload ostream <<运算符
例如,我建立一个多米诺骨牌的游戏,所以我需要打印我的立方体与数字:[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;
}
您可以使用上面的示例并修改格式以匹配所需的结果。
这将是一个*插入操作符*。此外,我不认为这回答了如何以两种方式打印对象: – 2015-04-03 19:43:36
该操作符将对象“插入”到ostream中。提取操作符通常用于'cin' – Carcigenicate 2015-04-03 19:50:16
@Drew Dormann感谢修正。 – Ziezi 2015-04-03 19:50:27
< <用于cout的运算符实际上是重载的位运算符,用于获取此行为。
我真的不明白你想要达到什么目的(代码段会有帮助)。但是,似乎您想要为ostream和YourClass类型重载< <。你可以有这样的东西:
void operator<<(ostream str, YourClass cls) {
// generate required output
}
请注意,这是一个常规函数,只是调用语法不同。
虽然其他人已经回答了如何重载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';
IIRC,它*的*重载...所以你想做什么就很有可能=) – Mints97 2015-04-03 19:37:32
标准使用[流操纵]( http://en.cppreference.com/w/cpp/io/manip)以各种方式打印相同的数据。 – 2015-04-03 19:40:32
哈哈我试图想办法,因为我不知道该怎么改变函数的参数,因为它们几乎相同,只有执行不同:( – imthaking 2015-04-03 19:40:49