文档详情

C学习笔记3友元和操作符重载.docx

发布:2024-03-10约4.32千字共10页下载文档
文本预览下载声明

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;

}

};

这里要用指针数组构建队员列表

显示全部
相似文档