题目:某学院有若干学生班级和许多学生,还成立了数学建模集训队、ACM集训队等若干集训队,每个学生属于某个自然班,又可以加入若干集训队,请编写模拟程序,设计班级类、学生类、集训队类,用智能指针表示这些实体间的关系,测试建立若干班级、集训队、学生对象,最后,输出各班级学生名单、各集训队学生名单。程序不可造成信息冗余,每个学生信息对应一个学生实体,也不可造成内存泄露。
/* 请在这里填写答案 /
int main(int argc, char* argv)
{
int n;
cin >> n;
Class C1("210901"); // 班级
Group A1("ACM"); // ACM
Group M1("MTH"); // 数学建模
for(int i = 0; i < n; i++){
Student s1;
cin >> s1;
C1.add(s1); // 学生加入班级; 班级对学生对象进行托管
}
try
{
// 学生1:加入ACM
auto a1 = C1[0]; // 获得第一个学生的共享智能指针
A1.join(a1); // 加入到ACM1
// 学生2:加入ACM和数据建模
auto a2 = C1[1];
A1.join(a2);
M1.join(a2);
// 学生3:加入ACM和数据建模
auto a3 = C1[2];
A1.join(a3);
M1.join(a3);
}
catch(MyException ex){
cout << ex.what() << endl;
}
catch(...){
cout << "error" << endl;
}
// 在学生学号后加上其参加的集训队标记
A1.label("A");
M1.label("M");
// 输出学生信息
cout << C1 << endl;
cout << A1 << endl;
cout << M1 << endl;
return 0;
}
输入:
3
001 ZHANG 21
002 SHAOX 22
003 CHENM 23
输出:
210901:
001A ZHANG 21
002AM SHAOX 22
003AM CHENM 23
ACM:
001A ZHANG 21
002AM SHAOX 22
003AM CHENM 23
MTH:
002AM SHAOX 22
003AM CHENM 23
班级里面的学生集合用shared_ptr,,,其他集训队的用weak_ptr