是否std::basic_ostream
有operator <<
接受std::basic_string
对象的重载?我正在阅读cppreference,但似乎没有列出。
问问题
212 次
3 回答
4
想象一下,您创建了自己的类Car
,其中包含车牌号、发动机的型号/功率以及许多其他信息。现在,假设您想提供一种很好的方式将您的汽车信息打印到文件或屏幕中。
如果你想使用basic_ostream
重载,你就没有运气,因为你定义的类没有重载。你可以提供print_into_ostream
方法,或者其他一些巧妙的技巧,但你刚刚意识到std::string
也没有适当的重载,你仍然可以做cout << myStr;
. 快速搜索后,您会找到适用于 的解决方案,std::string
您可以在课堂上使用它,如下所示:
class Car
{
std::string licence_plate, engine;
public:
// ... other here ...
friend ostream& operator<<(ostream& os, const Car& c);
};
ostream& operator<<(ostream& os, const Car& c)
{
os << c.licence_plate << "-" << c.engine;
return os;
}
现在你可以使用
cout << myCarObject << endl;
与任何内置类型一样。
std::string
使用相同的方法,您可以在此处找到文档。
于 2013-09-05T17:50:13.733 回答
3
命名空间中定义了非成员运算符std
。请参阅cppreference。
于 2013-09-05T17:39:52.177 回答
0
如果你想打印一个你的对象,你可以像这样class A
重载<< operator
:
ostream & operator << (ostream & os, A &a)
{
os << a.data_member;
}
以同样的方式,std namespace
有一个重载的运算符打印 class 的对象string
。
于 2013-09-05T17:53:56.563 回答