2 sinat 34927324 sinat_34927324 于 2016.05.12 00:02 提问

顺序栈中的重载操作<<

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吗?

4个回答

caozhy
caozhy   Ds   Rxr 2016.05.12 00:08

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

CSDNXIAOD
CSDNXIAOD   2016.05.12 00:12

顺序栈的操作
顺序栈的操作
顺序栈的各种操作.
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

beifengche
beifengche   2016.05.12 15:23

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

sinat_34927324
sinat_34927324 懂了,这个是成员函数所以可以调用私有数据,如果在主函数里就不行了
一年多之前 回复
gsxab
gsxab   2016.05.15 00:34

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

gsxab
gsxab 后面那个top和elements虽然是私有的,但是对成员函数来说是可见的啊。
一年多之前 回复
gsxab
gsxab 对于函数体,形参os是个ostream对象,举个例子就像cout一样的,这个类里面有多个<<的重载实现cout<<后面接上各种类型的实现。对这个问题,如果不能理解就把os当成传入了cout理解就好啦~
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!