定义: 一个类应该对其他类保持最少的了解。
释义: 只有直接的朋友通信。
直接的朋友:出现在成员变量,方法参数,方法返回值中的类。出现在局部变量中的类则不是直接朋友。
举例:如校长想知道学校全体同学的名字,只需与各班主任沟通就行,无需与所有同学沟通
学生类
#include <string>
class Student
{
public:
Student(std::string name);
Student(const Student &st); // 因为使用vector和string, 需实现拷贝构造函数
~Student();
void showName(); // 显示名称
private:
std::string name;
};
班主任类
#include <string>
#include <vector>
#include "Student.h"
// 班主任类
class HeadTeacher
{
public:
HeadTeacher(std::string name);
HeadTeacher(const HeadTeacher &ht); // 因为使用vector和string, 需实现拷贝构造函数
~HeadTeacher();
void addStudent(Student st); // 添加同学
void showStudentName(); // 显示所有同学名字
private:
std::string name;
std::vector<Student> students; // 保存学生
};
校长类
#include <string>
#include <vector>
#include "HeadTeacher.h"
class HeadMaster
{
public:
HeadMaster(std::string name);
~HeadMaster();
void addHeadTeacher(HeadTeacher ht);
void showAllStudentName();
private:
std::string name;
std::vector<HeadTeacher> headTeachers; // 保存班主任
};
客户端
#include "HeadMaster.h"
int main(int agrc, char* argv[])
{
// 生成学生
Student stW1("Wang1");
Student stW2("Wang2");
Student stW3("Wang3");
Student stW4("Wang4");
Student stL1("Li1");
Student stL2("Li1");
// 生成班主任
HeadTeacher htW("Wang");
HeadTeacher htL("Li");
// 生成校长
HeadMaster hm("Zhang");
// 分配学生给班主任
htW.addStudent(stW1);
htW.addStudent(stW3);
htW.addStudent(stL1);
htW.addStudent(stL2);
htL.addStudent(stW2);
htL.addStudent(stW4);
// 分配版主任给校长
hm.addHeadTeacher(htW);
hm.addHeadTeacher(htL);
// 输出全校学生名称
hm.showAllStudentName();
getchar();
return 0;
}
运行结果
源码地址