我有一些像这样的代码:
class Point {
public:
int x,y;
Point() : x(1), y(1) {}
}
我可以使用printf()
打印该课程的对象:
int main()
{
Point point;
printf("%o",point);
return 0;
}
或者我必须重载operator<<
并使用std::cout
:
std::ostream& operator<<(std::ostream& os, Point const& p)
{
os << p.x << "," << p.y;
return os;
}
int main()
{
Point point;
std::cout << point;
return 0;
}
答案 0 :(得分:6)
我可以使用
printf()
打印该课程的对象吗?
没有。在这个意义上,printf
是不可扩展的。
您最好的选择是在operator<<
和std::ostream
之间重载Point
。
PS 我建议将参数类型更改为Point const&
。
答案 1 :(得分:0)
但是,您可以在班级中使用自定义print
功能,以便按照您希望的方式打印对象:
...
void print() const {
printf("[%d, %d]", x, y);
}
...
int main()
{
Point point;
point.print();
return 0;
}
如果您愿意,也可以使用fprintf
和自定义流。这不完全是你的问题的答案,但似乎在描述的情况下是有用的。
答案 2 :(得分:0)
你必须重载操作符,否则printf()
会混淆对象point
的打印内容,因为该类有两个成员。