定義: 一個類應該對其他類保持最少的瞭解。
釋義: 只有直接的朋友通信。
直接的朋友:出現在成員變量,方法參數,方法返回值中的類。出現在局部變量中的類則不是直接朋友。
舉例:如校長想知道學校全體同學的名字,只需與各班主任溝通就行,無需與所有同學溝通
學生類
#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;
}
運行結果
源碼地址