C/C++ 学习手札(三)
2012/6/13 11:08:00 请友读忠(更多) E界MRP开发下载网 527阅 接着说说友员friend和操作符重载operator,为了把这两个搞清楚,费了大半天劲儿搞了一个堆栈,被一堆指针问题搞得头都大了! 不过,最终还是OK了! 这次做这么一件事,搞体育活动。每个团队Team 有5个队员Comperitor ,可以对队员做入栈、出栈操作,每个队员有编号、名字。对输入队员信息、输出队员信息做操作符重载,使得输入的时候能够给出相应提示。 构建一个队员类Comperitor C++代码/**
* 队员
*
/class Comperitor {
private:
* name[20]; //姓名
int id; //编号
public: /**
* 取得ID
*
/ int getId() {
return id;
} /**
* 设置ID
*
/ void setId(int id) {
this->id = id;
} /**
* 取得名字
*
/ ** getName() {
return name;
} /**
* 设置名字
*
/ void setName(* *name) {
strcpy(this->name, name);
} /**
* 重载输入操作符
*
/ friend istream & operator >>(istream & is, Comperitor & c) {
cout > c.id;
cout > c.name;
return is;
} /**
* 重载输出操作符
*
/ friend ostream & operator name, name);
}
构建一个重载操作符,注意使用&符号,引用方式,且操作符重载必须是友员方法!
/**
* 重载输入操作符
*
/friend istream & operator >>(istream & is, Comperitor & c) {
cout > c.id;
cout > 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];
发表评论