快捷搜索:

C/C++ 学习手札(三)

接着说说友员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 > c.id;

cout > c.name;

return is;

}

/**

* 重载输出操作符

*/

friend ostream & operator

为名字赋值的时刻,name我们应用的是char数组,必要经由过程strcpy赋值。

/**

* 设置名字

*/

void setName(char *name) {

strcpy(this->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这里要用指针数组构建队员列表

/**

* 队员列表

*/

Comperitor *c[5];

关于指针的应用,我还解释不清楚,久远的以前了能姑息用了!

看看整体的法度榜样吧!

#include

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 > c.id;

cout > c.name;

return is;

}

/**

* 重载输出操作符

*/

friend ostream & operator > *com;

// 指向置为当前输入工具

c[pointer] = com;

// 当前指针自 加

pointer++;

// 指针复位

if (pointer >= MAX) {

// 将当前指针指向栈顶

pointer = MAX - 1;

// 置为栈满

full = true;

}

}

/**

* 队员出队

*/

void pop() {

// 取适合前工具指针

Comperitor *com = c[pointer];

// 输出

cout

看看操作结果:

队员数据输入:

请输入第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

完成了入栈,出栈操作!

您可能还会对下面的文章感兴趣: