小弟有个有关问题想不明白,望们教下

小弟有个问题想不明白,望大虾们教下
在此处定义了下一个顺序表结构体(表中的函数有省略)
想重载下<<
并输出顺序表中的数据
C/C++ code

template<class T>
class LinearList
{
public:
    LinearList(int MaxListSize = 10);    //构造函数
    ~LinearList(){delete[] element;};    //析构函数
    void Output(ostream& out) const;
private:
    int length;
    int MaxSize;
    T *element;    //一维动态数组
};
.......
template<class T>
void LinearList<T>::Output(ostream& out) const
{
    //把表输出至输出流
    for(int i =0; i<length; i++)
    {
        out<<element[i]<<" ";
    }
}

//重载<<
template<class T>
ostream& operator<<(ostream& out, const LinearList<T>& x)
{
    x.Output(out); return out;
}



此两个函数,有N多地方看不懂.
1.void Output(ostream& out) const中const是什么 意思? 咋感觉const是否放在函数前面更好? ? 
2.Output(ostream& out)中out大概是什么意思?
3.out<<element[i]<<" "中为什么不是cout<<element[i]<<" "
4.x.Output(out)是什么意思?
5.return out有什么用处
6.重载<<参数ostream& out, const LinearList<T>& x 中第二个参数可是定好的?
望大虾们说些自己的看法理解 ^_^

------解决方案--------------------
1.是说这个函数是const函数,不能对对象做修改
2.out就是输入输出流了就像cout
3.同2,其实把cout当做形参,里面就相当于cout《...
4.调用你上面那个函数
5.返回输出流的引用,这样可以链式表达cout<< " "<< " ";
不然一次只能cout<< " " ;
6.是模板啊,不是定好的,你可以根据自己需要传入相应类型
------解决方案--------------------
运算符重载是“语法糖”。