是否std::basic_ostream有operator <<接受std::basic_string对象的重载?我正在阅读cppreference,但似乎没有列出。
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 回答