-3

是否std::basic_ostreamoperator <<接受std::basic_string对象的重载?我正在阅读cppreference,但似乎没有列出。

4

3 回答 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 回答