【发布时间】:2016-06-19 12:33:30
【问题描述】:
我不知道我所问的编程术语(这对我来说是个爱好),我在这里尝试新事物。查看我的工作场景:
#include <iostream>
class Foo {
int _x;
public:
Foo () : _x(0) {}
Foo (int x) : _x(x) {}
int get () const { return _x; }
};
int main () {
Foo f1;
Foo f2(10);
std::cout << "Value: " << f1.get () << std::endl; // 0
std::cout << "Value: " << f2.get () << std::endl; // 10
return 0;
}
是否可以像这样使用 f1 或 f2:
std::cout << "Value: " << f2 << std::endl; // shows 10
使用正确的代码更新:
#include <iostream>
class Foo {
int _x;
public:
Foo () : _x(0) {}
Foo (int x) : _x(x) {}
int get () const { return _x; }
friend std::ostream &operator<<(std::ostream &os, const Foo& f) {
return os << f.get ();
}
};
int main () {
Foo f1;
Foo f2(10);
std::cout << "Value: " << f1.get () << '\n'; // 0
std::cout << "Value: " << f2.get () << '\n'; // 10
std::cout << "Value: " << f1 << '\n'; // 0
return 0;
}
【问题讨论】:
-
yes 尝试查找重载流插入操作符
-
好的,知道了,谢谢:)
-
请重新考虑您对
endl的使用。 (虽然 +1 不是using namespace std;)。 -
仅在
.cpp实现文件中使用using namespace std;,但在.h头定义文件中更新 -
你试过了吗?它奏效了吗?见minimal reproducible example。
标签: c++