顺序栈中的重载操作<<

template
osrtream& operator<<(ostream& os,SeqStack&s){
os<<"top="<<s.top<<endl;
for(int i=0;i<=s.top;i++)
os<<i<<":"<<s.elements[i]<<endl;
return os;
} 函数头的iostream&, return os ,形参ostream& os, os<< 分别是啥意思?还有s.top,s.elements[i]合法吗?对象可以直接调用私有数据成员top和elements吗?

重载流输出运算符,使得你可以用类似cout<<堆栈 这样的形式输出堆栈的内容。是否合法要看这个函数是不是友元函数。

重载运算符有着相对比较固定。对象调用私有成员要看在哪里调用了。要看在哪里调用私有成员。

一、首先要知道两点:1.运算符<<是左结合的。2.按类似cout<<a<<b;这样用。ostream是输出流对象,比如标准输出流cout。
二、ostream&就是这样的ostream对象的一个引用。比如说cout<<a<<b;运算符运算cout<<a返回值应该是cout,然后再运算第二个<<运算符,其左操作数是返回值cout,右操作数是b。
三、根据以上分析,<<运算符的左操作数重载为ostream&(对象还是传引用吧),运算完了返回这个左操作数。所以返回类型也是ostream&,而且要返回的就是函数传入的左操作数,即形参os。