Ostream操作员超载无法正常工作

时间:2016-02-19 05:26:42

标签: c++ operator-overloading

我遇到了ostream运算符重载的问题。当我在我的Main()中输出时输出

Search test(20);
test.init_sorted();
cout << test;

为什么输出文件路径而不是我创建的流,我无法弄清楚。我省略了不属于输出数组的代码。我试图循环遍历数组的每个元素,并将其添加到最终通过cout输出的字符串中;

Main.cpp的

Search::Search(int size)
{
    array_size = size;
    numbers = new int[size];
}

void Search::init_sorted()
{

    for (int i = 0; i < array_size; i++) {

        if (i == 0) {
            srand(for_srand);
            numbers[i] = rand() % 5;
        }
        else {
            srand(for_srand);
            numbers[i] = numbers[i - 1] + rand() % 5;
        }           
    }


}

ostream & operator<<(ostream & os, const Search & s)
{
    string output;

    for (int i = 0; i < s.array_size; i++) {
        output += s.numbers[i] + " / ";
    }

    os << output;
    return os;

}

Search.cpp

class Search
{

private:
    int array_size;
    int *numbers; 
    int for_srand = 10;   

public:
    Search(int);
    ~Search();
    friend ostream& operator<<(ostream& os, const Search& dt);
};

Search.h

{{1}}

1 个答案:

答案 0 :(得分:1)

未定义的行为。由于指针算法,

    output += s.numbers[i] + " / ";

相同
    output += " / "[s.numbers[i]];

此外,它不会格式化任何数字:

for (int i = 0; i < s.array_size; i++) {
    out << s.numbers[i] << " / ";
}

话虽如此,除非您知道自己在做什么,否则请使用标准容器和算法,例如: std::vector<int>代替int*