我可以使用printf()打印该类的对象吗?

时间:2016-02-15 16:28:54

标签: c++ printf cout

我有一些像这样的代码:

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;
}

3 个答案:

答案 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的打印内容,因为该类有两个成员。