学生要属于某个班级,班级里有学生的列表
用指针进行对象间的关联,两个指针就可 以指向同一个对象
核心数据一定用指针,一定是new出来的
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Banji; //前置声明
class Student
{
public:
Student(Banji* pb, string name); //在创建对象时传入了班级的指针表示这个学生所在班级
void SetName(string str); //修改名字函数
private:
string _name;
Banji* _pb; //班级的指针
};
class Banji
{
public:
void AddStudent(Student* ps); //添加学生函数
void Show();
private:
vector<Student*> allStudents; //学生的数组
};
Student::Student(Banji* pb, string name) :_pb(pb),_name(name)
{
_pb->AddStudent(this); //在创建学生对象时,就一同把学生对象的指针插入数组里
}
void Student::SetName(string str)
{
_name = str; //修改名字
}
void Banji::AddStudent(Student* ps)
{
allStudents.push_back(ps); //将指针插入数组里
}
void Banji::Show()
{
for (Student* a : allStudents) //a是数组里每个元素的类型,遍历数组输出
{
a->Show();
}
}
int main()
{
//创建1班
Banji* b1 = new Banji;
//1班的第一个同学
Student* s1 = new Student(b1, "张三");
b1->Show();
cout << "-------------------------" << endl;
//1班的第二个同学
Student* s2 = new Student(b1, "李四");
b1->Show();
cout << "-------------------------" << endl;
//修改第二个同学的名字
s2->SetName("李五");
b1->Show();
cout << "-------------------------" << endl;
return 0;
}