如何使<<运算符过载?

How to overload the << operator?

本文关键字:lt 运算符 何使      更新时间:2023-10-16

我正在尝试构建自己的std::vector类,但在重载下标([])和cout <<运算符时遇到了问题。

到目前为止,我已经尝试将<<运算符定义为类的公共成员,然后在类声明之外编写函数体。

现在,我从iostream库中得到了充满错误的终端页面,我甚至不知道从哪里开始查找它们。

我是C++的初学者,不习惯friend关键字或template关键字。我做错了什么?

template<typename T>
class MyVector {
    private:
        T* Array;
    public:
        T& operator[](int b)
        {
            ...
        }
        std::ostream& output(std::ostream& s) const;
};

std::ostream& operator<<(std::ostream& output, MyVector& A)
{
    int i;
    for(i = 0; i < A.GetDimension(); i++)
    {
        output << A[i] << " ";
    }
    output << "n";
    return output;
};

您所拥有的是正确的,您只是忘记了模板声明:

template <typename T>
std::ostream& operator<<(std::ostream& output, MyVector<T>& A)
{
    int i;
    for (i = 0; i < A.GetDimension(); i++)
    {
        output << A[i] << " ";
    }
    output << "n";
    return output;
};
template<typename T>
class MyVector{
    ...
    std::ostream& printToStream(std::ostream& output) const {
        int i;
        for (i = 0; i < Dimension; i++) {
            output << Array[i] << " ";
        }
        output << "n";
        return output;
    }
    ...
};
template<typename T>
std::ostream& operator<<(std::ostream& output, const MyVector<T>& A) {
   return A.printToStream(output);
}