副标题#e#
接着说说友员friend和操纵符重载operator,为了把这两个搞清楚,费了泰半天劲儿搞了一个仓库,被一堆指针问题搞得头都大了! 不外,最终照旧OK了!
这次做这么一件事,搞体育勾当。每个团队Team 有5个队员Comperitor ,可以对队员做入栈、出栈操纵,每个队员有编号、名字。对输入队员信息、输出队员信息做操纵符重载,使得输入的时候可以或许给出相应提示。
构建一个队员类Comperitor
C++代码
/**
* 队员
*/
class Comperitor {
private:
char name[20]; //姓名
int id; //编号
public:
/**
* 取得ID
*/
int getId() {
return id;
}
/**
* 配置ID
*/
void setId(int id) {
this->id = id;
}
/**
* 取得名字
*/
char* getName() {
return name;
}
/**
* 配置名字
*/
void setName(char *name) {
strcpy(this->name, name);
}
/**
* 重载输入操纵符
*/
friend istream & operator >>(istream & is, Comperitor & c) {
cout << "请输入您的编号: ";
is >> c.id;
cout << "请输入您的姓名: ";
is >> c.name;
return is;
}
/**
* 重载输出操纵符
*/
friend ostream & operator <<(ostream & os, Comperitor & c) {
os << "编号: " << c.id << endl;
os << "姓名: " << c.name << endl;
return os;
}
};
#p#副标题#e#
为名字赋值的时候,name我们利用的是char数组,需要通过strcpy赋值。
/**
* 配置名字
*/
void setName(char *name) {
strcpy(this->name, name);
}
构建一个重载操纵符,留意利用&标记,引用方法,且操纵符重载必需是友员要领!
/**
* 重载输入操纵符
*/
friend istream & operator >>(istream & is, Comperitor & c) {
cout << "请输入您的编号: ";
is >> c.id;
cout << "请输入您的姓名: ";
is >> c.name;
return is;
}
构建一个团队类,用来节制入栈、出栈。
/**
* 团队
*/
class Team {
private:
/**
* 队员列表
*/
Comperitor *c[5];
/**
* 当前行列指针
*/
int pointer;
/**
* 行列上限
*/
int MAX;
/**
* 行列下限
*/
int MIN;
/**
* 是否为空
*/
bool empty;
/**
* 是否为满
*/
bool full;
public:
/**
* 空结构
*/
Team() {
MAX = 5;
MIN = 0;
pointer = MIN;
empty = false;
full = false;
}
/**
* 取恰当前指针
*/
int getPointer() {
return pointer;
}
/**
* 队员入队
*/
void push() {
// 取恰当前工具指针
Comperitor *com = new Comperitor;
// 输入
cin >> *com;
// 指向置为当前输入工具
c[pointer] = com;
// 当前指针自 加
pointer++;
// 指针复位
if (pointer >= MAX) {
// 将当前指针指向栈顶
pointer = MAX - 1;
// 置为栈满
full = true;
}
}
/**
* 队员出队
*/
void pop() {
// 取恰当前工具指针
Comperitor *com = c[pointer];
// 输出
cout << *com;
// 指向置为空
c[pointer] = NULL;
// 当前指针自减
pointer--;
// 指针复位
if (pointer < MIN) {
// 置为栈空
empty = true;
// 将当前指针指向栈底
pointer = MIN;
}
}
/**
* 是否为空栈
*/
bool isEmpty() {
return empty;
}
/**
* 是否为满栈
*/
bool isFull() {
return full;
}
};
这里要用指针数组构建队员列表
/**
* 队员列表
*/
Comperitor *c[5];
关于指针的利用,我还表明不清楚,长远的已往了能迁就用了! 看看整体的措施吧!
#p#分页标题#e#
#include <iostream>
using namespace std;
/**
* 队员
*/
class Comperitor {
private:
char name[20]; //姓名
int id; //编号
public:
/**
* 取得ID
*/
int getId() {
return id;
}
/**
* 配置ID
*/
void setId(int id) {
this->id = id;
}
/**
* 取得名字
*/
char* getName() {
return name;
}
/**
* 配置名字
*/
void setName(char *name) {
strcpy(this->name, name);
}
/**
* 重载输入操纵符
*/
friend istream & operator >>(istream & is, Comperitor & c) {
cout << "请输入您的编号: ";
is >> c.id;
cout << "请输入您的姓名: ";
is >> c.name;
return is;
}
/**
* 重载输出操纵符
*/
friend ostream & operator <<(ostream & os, Comperitor & c) {
os << "编号: " << c.id << endl;
os << "姓名: " << c.name << endl;
return os;
}
};
/**
* 团队
*/
class Team {
private:
/**
* 队员列表
*/
Comperitor *c[5];
/**
* 当前行列指针
*/
int pointer;
/**
* 行列上限
*/
int MAX;
/**
* 行列下限
*/
int MIN;
/**
* 是否为空
*/
bool empty;
/**
* 是否为满
*/
bool full;
public:
/**
* 空结构
*/
Team() {
MAX = 5;
MIN = 0;
pointer = MIN;
empty = false;
full = false;
}
/**
* 取恰当前指针
*/
int getPointer() {
return pointer;
}
/**
* 队员入队
*/
void push() {
// 取恰当前工具指针
Comperitor *com = new Comperitor;
// 输入
cin >> *com;
// 指向置为当前输入工具
c[pointer] = com;
// 当前指针自 加
pointer++;
// 指针复位
if (pointer >= MAX) {
// 将当前指针指向栈顶
pointer = MAX - 1;
// 置为栈满
full = true;
}
}
/**
* 队员出队
*/
void pop() {
// 取恰当前工具指针
Comperitor *com = c[pointer];
// 输出
cout << *com;
// 指向置为空
c[pointer] = NULL;
// 当前指针自减
pointer--;
// 指针复位
if (pointer < MIN) {
// 置为栈空
empty = true;
// 将当前指针指向栈底
pointer = MIN;
}
}
/**
* 是否为空栈
*/
bool isEmpty() {
return empty;
}
/**
* 是否为满栈
*/
bool isFull() {
return full;
}
};
/**
* 主函数
*/
int main() {
Team t;
cout << endl << "队员数据输入:" << endl;
int i = 1;
while (!t.isFull()) {
cout << "请输入第" << i << "位队员的信息:" << endl;
t.push();
i++;
};
cout << endl << "队员数据输出:" << endl;
int j = t.getPointer() + 1;
while (!t.isEmpty()) {
cout << "第" << j << "位队员的信息:" << endl;
t.pop();
j--;
};
return 0;
}
看看操纵功效:
#p#分页标题#e#
队员数据输入:
请输入第1位队员的信息:
请输入您的编号: 1
请输入您的姓名: a
请输入第2位队员的信息:
请输入您的编号: 2
请输入您的姓名: b
请输入第3位队员的信息:
请输入您的编号: 3
请输入您的姓名: c
请输入第4位队员的信息:
请输入您的编号: 4
请输入您的姓名: d
请输入第5位队员的信息:
请输入您的编号: 5
请输入您的姓名: e
队员数据输出:
第5位队员的信息:
编号: 5
姓名: e
第4位队员的信息:
编号: 4
姓名: d
第3位队员的信息:
编号: 3
姓名: c
第2位队员的信息:
编号: 2
姓名: b
第1位队员的信息:
编号: 1
姓名: a
完成了入栈,出栈操纵!