std :: ostream&运算符<<在我班上使用一个函数

时间:2017-03-02 04:44:14

标签: c++ enums operator-keyword ostream

所以我有一个需要将对象打印到ostream的ostream运算符。简单吧。我有一个打印功能,需要一个ostream,也做同样的事情。我的ostream被定义为我班上的朋友。我只想知道如何在我的操作符中使用我的打印功能...还有我的打印功能使用枚举

void Box::print(std::ostream & out, Box::Type type) const
{
switch (type)
{
case FILLED:
    for (int i = 0; i < _height; i++)
    {
        for (int j = 0; j < _width; j++)
        {
            out << "x";
        }
        out << std::endl;
    }
    break;
case HOLLOW:
    for (int i = 0; i < _height; i++)
    {
        for (int j = 0; j < _width; j++)
        {
            if (i == 0 || i == _height - 1 || j == 0 || j == _width - 1)
                out << "x";
            else
                out << " ";
        }
        out << std::endl;
    }
    break;
case CHECKERED:
    for (int i = 0; i < _height; i++)
    {
        for (int j = 0; j < _width; j++)
        {
            if ((i % 2 == 0 && j % 2 == 0) || (i % 2 != 0 && j % 2 != 0))
            {
                out << "x";
            }
            else
            {
                out << " ";
            }
        }
        out << std::endl;
    }
    break;
}
}



std::ostream & operator<<(std::ostream &out, Box &b1)
{
   return b1.print(out, Box::Type type) // obviously dosent exist here
}

1 个答案:

答案 0 :(得分:0)

两个选项:

第一个是将Type添加为类的成员,您可以从运算符中访问它。

第二个是用std :: pair实际重载ostream运算符。 例如:

ostream& operator<<(ostream& os, const std::pair<Box, Type>& p) {
    p.first.print(os, p.second);
    return os;
}