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 懂了,这个是成员函数所以可以调用私有数据,如果在主函数里就不行了
大约 2 年之前 回复
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虽然是私有的,但是对成员函数来说是可见的啊。
大约 2 年之前 回复
gsxab
gsxab 对于函数体,形参os是个ostream对象,举个例子就像cout一样的,这个类里面有多个<<的重载实现cout<<后面接上各种类型的实现。对这个问题,如果不能理解就把os当成传入了cout理解就好啦~
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
顺序栈定义练习
#include #include //顺序栈练习 #define MaxSize 100 #define ElemType int typedef struct { ElemType data[MaxSize]; int top; }SqStack; //top初始值为-1,top总是指向栈顶,top=max-1即为栈满,top=-1即为栈空,进top++,出top-- //区分好栈指
顺序栈的定义及相关操作
#include #define M 1000 typedef char ElemType; typedef struct //定义一个顺序栈 { ElemType data[M]; int top; } SeqStack; void InitStack(SeqStack *s)//创建一个栈 { s->top=-1; } bool Push(SeqStack *
【数据结构实验二】顺序栈的建立、入栈和出栈
版权申明: 本实验的实验目的,实验内容,实验要求归东北大学所有,未经许可禁止转载。 实验二 顺序栈的建立、入栈和出栈 实验目的: 掌握栈的创建、入栈和出栈操作;理解顺序栈在入栈和出栈时对Top指针的移动。 实验内容: 1. 通过结构体声明线性栈; 2. 在初始化操作中,对栈分配存储空间,如可容纳100个元素; 3. 编写入栈、出栈、栈空判断(可选)操作; 4. 编写函
顺序栈的基本操作:初始化、进栈、出栈、读栈顶元素
顺序栈:利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时由于栈操作的特殊性,还必须附设一个位置指针top(栈顶指针)来动态地指示栈顶元素在顺序栈中的位置。通常以top=-1表示空栈。代码如下:#includeusing namespace std;#define  TRUE 1#define  FALSE 0//顺序栈的存储结构#define Stack_Size 50 //设栈中元
顺序栈——9种基本操作和实现(C语言)
栈是仅限定在表尾进行插入和删除操作的线性表,九种栈的基本操作;分别是构造 销毁 清空 栈长 栈顶 插入 删除 遍历。下面就是代码实现:  //头文件 #include #include #include #include //宏定义 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define IN
顺序栈的基本操作实现c++
注:若有问题或需要补充的内容请告之,新手上路,谢谢。 #include #include #include #include #include #include #include using namespace std; #define MAXSIZE 100 /*结构体*/ typedef struct lnode { int data[MAXSIZE]; int top;
实验三(1) 顺序栈的验证实验
《数据结构》实验三:    栈和队列实验 一..实验目的      巩固栈和队列数据结构,学会运用栈和队列。 1.回顾栈和队列的逻辑结构和受限操作特点,栈和队列的物理存储结构和常见操作。 2.学习运用栈和队列的知识来解决实际问题。 3.进一步巩固程序调试方法。 4.进一步巩固模板程序设计。 二.实验时间    准备时间为第5周到第6周,具体集中实验时
编写程序,实现顺序栈的创建、进栈和出栈等基本操作算法。
编写程序,实现顺序栈的创建、进栈和出栈等基本操作算法。 (1) 创建包含任意个元素的顺序栈。 (2) 进栈一个任意元素。 (3) 出栈一个任意元素。 (4) 取栈顶元素并输出。 *(5) 删除栈中值为给定值的元素。 *(6) 利用顺序表实现顺序栈元素的逆置。         #include     #include     #include     #include  
C++实现顺序栈的基本功能
栈是限定仅在表头进行插入和删除操作的线性表,有着先进后出的特点(FILO); 现在我来动手实现栈的基本本功能练练手; 定义栈的头文件如下: #ifndef CSTOCK_H_ #define CSTOCK_H_ const int STOCK_SIZE = 100;//定义栈的大小 typedef int elemType;//定义栈元素类型,目前仅用int来练手 class CStoc
顺序栈的验证实验
#ifndef SeqStack_H #define SeqStack_H const int StackSize=10; template class SeqStack { public: SeqStack(); ~SeqStack(){} void Push(DataType x); DataType Pop(); DataType GetTop(); int Emp