【发布时间】:2021-07-25 11:00:22
【问题描述】:
myclass是我写的一个C++类,我写的时候:
myclass x;
cout << x;
如何输出10 或20.2,例如integer 或float 值?
【问题讨论】:
myclass是我写的一个C++类,我写的时候:
myclass x;
cout << x;
如何输出10 或20.2,例如integer 或float 值?
【问题讨论】:
通常为您的班级重载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;
}
【讨论】:
myclass 有任何private 字段,并且您希望operator<<() 输出它们,则myclass 应将std::ostream& operator<<(std::ostream&, myclass const&) 声明为朋友。
const myclass &m 而不是myclass const &m吗?
const,它表示:m is a reference to a const myclass。在类型之前加上它,它说“m 是对 myclass const` 的引用,它正好在无意义和真正不合语法之间的参差不齐的边缘。
你需要重载<<操作符,
std::ostream& operator<<(std::ostream& os, const myclass& obj)
{
os << obj.somevalue;
return os;
}
然后,当您执行cout << x(在您的情况下x 的类型为myclass)时,它会输出您在方法中告诉它的任何内容。在上面的示例中,它将是x.somevalue 成员。
如果成员的类型不能直接添加到ostream,那么您还需要使用与上述相同的方法为该类型重载<< 运算符。
【讨论】:
这很容易,只需实施:
std::ostream & operator<<(std::ostream & os, const myclass & foo)
{
os << foo.var;
return os;
}
您需要返回对 os 的引用才能链接输出 (cout
【讨论】:
即使其他答案提供了正确的代码,也建议使用隐藏的朋友功能来实现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;
}
【讨论】:
替代方案:
struct myclass {
int i;
inline operator int() const
{
return i;
}
};
【讨论】: