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

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

本文关键字:对象 打印 可以使 printf 我可以      更新时间:2023-10-16

我有一些这样的代码:

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

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

不。 从这个意义上说,printf是不可扩展的。

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

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

但是

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

...
void print() const {
  printf("[%d, %d]", x, y);
}
...
int main()
{
  Point point;
  point.print();
  return 0;
}

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

你必须

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