面向对象实验二友元
创始人
2024-01-29 06:24:10
0

一、实验目的

一个类的友元函数能够直接访问该类所有成员,包括 public、protected、private 类

型的成员;一个类可以是另一个类的友元,友元类的所有成员函数都是另一个类的友元函数,

能够直接访问另一个类的所有成员。本实验目的是:熟练掌握友元函数的设计与应用;熟练

掌握友元类的设计与应用。

二、实验内容

使用 Visual C++ 6.0 分别建立学生类 CStudent、学生类的友元函数以及学生类的友元类,

并编制主程序来验证对所创建的友元函数和友元类的正确性。

三、实验要求

1.设计一个学生类 CStudents,其结构如下:

l  私有数据成员 ID(学号)、Name(学生姓名)、Score(成绩);

l  构造函数对数据成员初始化;

l  设计一个友元函数 Display(CStudent&);根据百分制成绩输出成绩的等级:>=90

为优秀;80~89 为良好;70~79 为中等;60~69 为及格;< 60 为不及格;

l  输出结果如下:

姓名  成绩 等级

LeBron Jams  75  中等

Michael  Jordan  98  优秀

Chris Bosh  55  不及格

Stephen Curry  80  良好

l  2.设计一个 CStudents 的友元类 CTeacher,其结构包含两个成员函数:

n  void Modify(CStudent& s):实现对学生的成绩的修改;

n  void Display(CStudent& s)输出 s 成绩的等级;

四、思考题

1.友元函数有什么特点?在什么时候采用友元函数?

2.友元类有什么特点?什么是使用友元类的限制?

实验代码:

//CStudents.h

#ifndef CSTUDENTS_H_

#define CSTUDENTS_H_

#include

#include

using namespace std;

class CStudents

{

friend  class CTeacher;

private:

int ID;//学号

string Name;//姓名

int Score;//成绩

public:

CStudents(int i=0,char *n="null",int S=0);//构造函数初始化

friend void Display(CStudents &s);

};

class CTeacher

{

public:

CTeacher(){ CStudents(); }

void Modify(CStudents &s);//实现对学生成绩的修改

void Display(CStudents &s);//输出s成绩的等级

};

#endif

//CStudents.cpp

#include

#include"CStudents.h"

using namespace std;

CStudents::CStudents(int i, char *n, int S) :ID(i), Name(n), Score(S)

{

}

void Display(CStudents &s)

{

cout.width(15);

cout << s.Name;

cout.width(8);

cout<

if (s.Score >= 90)

{

cout.width(10);

cout << "优秀" << endl;

}

else if (s.Score >= 80 && s.Score <= 89)

{

cout.width(10);

cout << "良好" << endl;

}

else if (s.Score >= 70 && s.Score <= 79)

{

cout.width(10);

cout << "中等" << endl;

}

else if (s.Score >= 60 && s.Score <= 69)

{

cout.width(10);

cout << "及格" << endl;

}

else

{

cout.width(10);

cout << "不及格" << endl;

}

}

void CTeacher::Modify(CStudents &s)

{

string g;

cout << "please enter what data you want to change (取消 to quit):(成绩、学号、姓名) ";

while (1)

{

cin >> g;

if (g == "取消")

{

break;

}

else if(g == "成绩")

{

cout << "How many you want to change: ";

int cheng;

cin >> cheng;

s.Score = cheng;

}

else if(g == "学号")

{

cout << "What ID you want to change:";

int ji;

cin >> ji;

s.ID = ji;

}

else if (g == "姓名")

{

cout << "What name you want to change:";

string name;

cin >> name;

s.Name = name;

}

else

cout << "you enter is wrong!";

cout << "please enter what data you want to change (取消 to quit):(成绩、学号、姓名) ";

}

}

void CTeacher::Display(CStudents &s)

{

if (s.Score >= 90)

{

cout.width(10);

cout << "优秀" << endl;

}

else if (s.Score >= 80 && s.Score <= 89)

{

cout.width(10);

cout << "良好" << endl;

}

else if (s.Score >= 70 && s.Score <= 79)

{

cout.width(10);

cout << "中等" << endl;

}

else if (s.Score >= 60 && s.Score <= 69)

{

cout.width(10);

cout << "及格" << endl;

}

else

{

cout.width(10);

cout << "不及格" << endl;

}

}

//user.cpp

#include"CStudents.h"

//#include

//using namespace std;

int main()

{

CStudents a2(1400830222,"LeBron Jams",75);

CStudents a1;

CStudents a3(1400830221, "Michael Jordan", 98);

CStudents a4(1400830220, "Chris Bosh", 55);

CStudents a5(1400830219, "Stephen Currt", 80);

cout << "          姓名     成绩       等级 " << endl;

cout << "-----------------------------------" << endl;

Display(a1);

Display(a2);

Display(a3);

Display(a4);

Display(a5);

CTeacher b1;

cout << " "<< endl;

cout << " " << endl;

cout << "测试CTeacher 的Display." << endl;

b1.Display(a4);

cout << " " << endl;

cout << " " << endl;

b1.Modify(a2);

Display(a2);

return 0;

}

思考题1:友元函数有什么特点?在什么时候采用友元函数?

答:友元函数不属于类的内部函数,但却可以访问类的私有成员。在想实现数据之间的共享和减少资源开销时可以使用和在类A要访问类B的私有成员时可以采用。

思考题2:友元类有什么特点?什么是使用友元类的限制?

答:一个类的友元类可以访问这个类的所有成员,这个友元类的函数全都为该类的友元函数。友元类的限制:友元类不能被继承;友元类是单向的,比如A是B的友元但B并不是A的友元;友元关系不能传递,比如B是A的友元,C是B的友元,并不意味着C是A的友元。

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...