定义一个MyTeam类,包含普通成员变量:团队的名字、成员人数,成员姓名的指针,奖章个数;静态成员变量:BJFU奖章个数(初始值为0)。
2.定义该类的成员函数:
1)构造函数,提示用户输入成员人数,开辟数组空间,用户键盘输入成员姓名,同时输出“构造函数被调用啦”
2)析构函数,输出“析构函数被调用啦”;
3)复制构造函数,实现对象的复制功能,并且输出“复制构造函数被调用啦”;
4)静态成员函数getBJFURewardNum,返回BJFU奖章个数的值;
6)成员函数winReward,奖章个数加一,同时BJFU奖章个数加一;
7)输出运算符重载,输出团队介绍,将团队的所有信息打印输出,并输出“输出运算符被调用啦”;8)>==和<这三个运算符重载,通过比较奖章个数大小来比较对象的大小,并分别输出“*运算符被调用啦”;
9)定义一个友元类School,包含一个成员函数getTeamInfo,实现输出MyTeam类对象的成员姓名和奖章个数。
3.在main函数中分别测试以上成员函数及友元类。
c++类问题 (奖章问题)太长了来不及做了
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- qfl_sdu 2022-06-23 11:04关注
代码如下:
#include <iostream> using namespace std; class MyTeam { private: char teamName[30];//团队名字 int teamNmb; //人数 char **teamPsn; //团队成员 int jz; static int BJFU; public: friend class School; MyTeam() { cout << "请输入团队名称:"; cin >> teamName; cout << "请输入成员人数:"; cin >> teamNmb; teamPsn = new char*[teamNmb]; for (int i = 0; i < teamNmb; i++) { teamPsn[i] = new char[30]; cout << "请输入第" << i + 1 << "个人的姓名:"; cin >> teamPsn[i]; } jz = 0; cout << "构造函数被调用啦" << endl; } ~MyTeam() { for (int i = 0; i < teamNmb; i++) { delete[] teamPsn[i]; teamPsn[i] = 0; } delete[] teamPsn; teamPsn = 0; cout << "析构函数被调用啦" << endl; } MyTeam(MyTeam& t) { strcpy(teamName,t.teamName); teamNmb = t.teamNmb; teamPsn = new char* [teamNmb]; for (int i = 0; i < teamNmb; i++) { teamPsn[i] = new char[30]; strcpy(teamPsn[i],t.teamPsn[i]); } jz = 0; cout << "复制构造函数被调用啦" << endl; } static int getBJFURewardNum() { return BJFU; } void winReward() { jz++; BJFU++; } char* getTeamName() { return teamName; } friend ostream& operator<<(ostream& os, MyTeam& t); friend int operator >(MyTeam& t1, MyTeam& t2); friend int operator ==(MyTeam& t1, MyTeam& t2); friend int operator <(MyTeam& t1, MyTeam& t2); }; ostream& operator<<(ostream& os, MyTeam& t) { os << "团队名称:" << t.teamName << endl; os << "团队人数:" << t.teamNmb << endl; os << "成员姓名:" << endl; for (int i = 0; i < t.teamNmb; i++) os << t.teamPsn[i]; os << "奖章个数:" << t.jz << endl; os << "输出运算符被调用啦" << endl; return os; } int operator >(MyTeam& t1, MyTeam& t2) { cout << ">运算符被调用啦" << endl; if (t1.jz > t2.jz) return 1; else return 0; } int operator ==(MyTeam& t1, MyTeam& t2) { cout << "==运算符被调用啦" << endl; if (t1.jz == t2.jz) return 1; else return 0; } int operator <(MyTeam& t1, MyTeam& t2) { cout << "<运算符被调用啦" << endl; if (t1.jz < t2.jz) return 1; else return 0; } int MyTeam::BJFU = 0; class School { public: void getTeamInfo(MyTeam& team) { cout << team << endl; } }; int main() { MyTeam* t1 = new MyTeam(); MyTeam t2(*t1); MyTeam* t3 = new MyTeam(); School sc; t1->winReward(); cout << "BJFU奖章个数:" << MyTeam::getBJFURewardNum() << endl; if (*t1 > *t3) cout << t1->getTeamName() << "比"<< t3->getTeamName() << "的奖章多" << endl; else if(*t1 == *t3) cout << "两个团队的奖章一样多" << endl; else if(*t1 < *t3) cout <<t3->getTeamName()<<"比"<<t1->getTeamName()<< "的奖章多" << endl; sc.getTeamInfo(*t1); sc.getTeamInfo(t2); sc.getTeamInfo(*t3); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
- ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
- ¥15 Attention is all you need 的代码运行
- ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
- ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
- ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
- ¥30 关于<main>标签页面跳转的问题
- ¥80 部署运行web自动化项目
- ¥15 腾讯云如何建立同一个项目中物模型之间的联系
- ¥30 VMware 云桌面水印如何添加