我可以使用 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::ostream
和 Point
之间重载 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 有两个成员。
我有一些这样的代码:
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;
}
Can I print object of that class using
printf()
?
没有。 printf
在这个意义上是不可扩展的。
您最好的选择是在 std::ostream
和 Point
之间重载 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 有两个成员。