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

Can I print an object of the class using printf()?

我有一些这样的代码:

class Point {
public:
    int x,y;
    Point() : x(1), y(1) {}
}

我可以使用 printf():

打印那个 class 的对象吗
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;
}

Can I print object of that class using printf()?

没有。 printf 在这个意义上是不可扩展的。

您最好的选择是在 std::ostreamPoint 之间重载 operator<<

PS 我建议将参数类型更改为 Point const&.

但是,您可以在 class 中使用自定义 print 函数,这将按照您想要的方式打印对象:

...
void print() const {
  printf("[%d, %d]", x, y);
}
...

int main()
{
  Point point;
  point.print();
  return 0;
}

如果需要,您还可以使用 fprintf 和自定义流。这并不完全是您问题的答案,但在所描述的情况下似乎很有用。

您必须重载运算符,否则,printf() 会混淆对象 point 的打印内容,因为 class 有两个成员。