myclass
是我写的C ++课程,当我写作时:
myclass x;
cout << x;
如何输出10
或20.2
,如integer
或float
值?
答案 0 :(得分:75)
通常会为您的班级重载operator<<
:
struct myclass {
int i;
};
std::ostream &operator<<(std::ostream &os, myclass const &m) {
return os << m.i;
}
int main() {
myclass x(10);
std::cout << x;
return 0;
}
答案 1 :(得分:18)
您需要重载<<
运算符
std::ostream& operator<<(std::ostream& os, const myclass& obj)
{
os << obj.somevalue;
return os;
}
然后,当您执行cout << x
(x
类型为myclass
时),它会输出您在方法中告诉它的任何内容。在上面的示例中,它将是x.somevalue
成员。
如果无法将成员的类型直接添加到ostream
,那么您还需要使用与上面相同的方法重载该类型的<<
运算符。
答案 2 :(得分:8)
这很容易,只需实施:
std::ostream & operator<<(std::ostream & os, const myclass & foo)
{
os << foo.var;
return os;
}
你需要返回对os的引用才能链接outpout(cout&lt;&lt; foo&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; endl)
答案 3 :(得分:2)
即使其他答案提供了正确的代码,也建议使用隐藏的朋友函数来实现operator<<
。隐藏友元函数的范围更有限,因此编译速度更快。由于混乱命名空间范围的重载更少,编译器需要做的查找更少。
struct myclass {
int i;
friend auto operator<<(std::ostream& os, myclass const& m) -> std::ostream& {
return os << m.i;
}
};
int main() {
auto const x = myclass{10};
std::cout << x;
return 0;
}
答案 4 :(得分:0)
替代:
struct myclass {
int i;
inline operator int() const
{
return i;
}
};