C学习笔记3友元和操作符重载.docx
CC++学习笔记2
接着说说友员friend和操作符重载operator,为了把这两个搞清楚,费了大半天劲儿搞了一个堆栈,被一堆指针问题搞得头都大了!不过,最终还是OK了!
这次做这么一件事,搞体育活动。每个团队Team有5个队员Comperitor,可以对队员做入栈、出栈操作,每个队员有编号、名字。对输入队员信息、输出队员信息做操作符重载,使得输入的时候能够给出相应提示。
构建一个队员类Comperitor
C++代码
/**
*队员
*/
classComperitor{private:
charname[20];//姓名intid;//编号
public:
/**
*取得ID
*/
intgetId(){
returnid;
}
/**
*设置ID
*/
voidsetId(intid){this-id=id;
}
/**
*取得名字
*/
char*getName(){returnname;
}
/**
*设置名字
*/
voidsetName(char*name){
strcpy(this-name,name);
}
/**
*重载输入操作符
*/
friendistreamoperator(istreamis,Comperitorc){cout请输入您的编号:;
isc.id;
cout请输入您的姓名:;isc.name;
returnis;
}
/**
*重载输出操作符
*/
friendostreamoperator(ostreamos,Comperitorc){os编号:c.idendl;
os姓名:c.nameendl;returnos;
}
};
为名字赋值的时候,name我们使用的是char数组,需要通过strcpy赋值。
/**
*设置名字
*/
voidsetName(char*name){strcpy(this-name,name);
}
构建一个重载操作符,注意使用符号,引用方式,且操作符重载必须是友员方法!
/**
*重载输入操作符
*/
friendistreamoperator(istreamis,Comperitorc){cout请输入您的编号:;
isc.id;
cout请输入您的姓名:;isc.name;
returnis;
}
构建一个团队类,用来控制入栈、出栈。
/**
*团队
*/
classTeam{private:
/**
*队员列表
*/
Comperitor*c[5];
/**
*当前队列指针
*/
intpointer;
/**
*队列上限
*/
intMAX;
/**
*队列下限
*/
intMIN;
/**
*是否为空
*/
boolempty;
/**
*是否为满
*/
boolfull;public:
/**
*空构造
*/Team(){
MAX=5;
MIN=0;
pointer=MIN;empty=false;full=false;
}
/**
*取得当前指针
*/
intgetPointer(){returnpointer;
}
/**
*队员入队
*/
voidpush(){
//取得当前对象指针
Comperitor*com=newComperitor;
//输入
cin*com;
//指向置为当前输入对象
c[pointer]=com;
//当前指针自加
pointer++;
//指针复位
if(pointer=MAX){
//将当前指针指向栈顶
pointer=MAX-1;
//置为栈满
full=true;
}
}
/**
*队员出队
*/
voidpop(){
//取得当前对象指针
Comperitor*com=c[pointer];
//输出
cout*com;
//指向置为空
c[pointer]=NULL;
//当前指针自减
pointer--;
//指针复位
if(pointerMIN){
//置为栈空
//置为栈空
empty=true;
//将当前指针指向栈底
pointer=MIN;
}
}
/**
是否为空栈
*/
boolisEmpty(){returnempty;
}
/**
是否为满栈
*/
boolisFull(){returnfull;
}
};
这里要用指针数组构建队员列表