#include <iostream>
#include <vector>
#include <string>
class Doctor; // forward declaration
class Patient // 환자 입장에서 어떤 의사들을 만나는지 기록해놓을 수 있어야한다. 서로 동등한 관계.
{
private:
string m_name;
vector<Doctor*> m_doctors;
public:
Patient(string name_in)
: m_name(name_in)
{}
void addDoctor(Doctor * new_doctor)
{
m_doctors.push_back(new_doctor);
}
void meetDoctors(); // 여기서 바디를 구현하면 doctor에 m_name이 있는지 모른다. (전방선언만 해놓았기 때문)
friend class Doctor;
};
void Patients::meetDoctors();
{
for(auto & ele : m_doctors)
{
cout << "Meet doctor : " << ele->m_name << "\n";
}
}
class Doctor
{
private:
string m_name;
vector<Patient*> m_patients;
public:
DOctor(const int & name_in)
: m_name(name_in)
{}
void addPatient(Patient * new_patient)
{
m_patients.push_back(new_patient);
}
void meetPatients()
{
for(auto & ele : m_patients)
{
cout << "Meet Patient : " << ele->m_name << "\n";
}
}
friend class Patient; // 멤버 변수가 너무 많을경우 getname 이런걸 다 구현하기 힘드므로 friend로.
};
int main()
{
Patient *p1 = new Patient("Jack Jack");
Patient *p2 = new Patient("Dash");
Patient *p3 = new Patient("Violet");
Doctor *d1 = new Doctor("Doctor K");
Doctor *d2 = new Doctor("Doctor L");
p1->addDoctor(d1);
d1->addPatient(p1);
p2->addDoctor(d2);
d2->addPatient(p2);
p2->addDoctor(d1);
d1->addPatient(p2);
//patients meet doctors
p1->meetDoctors();
// doctors meet patients
d1->meetPatients();
delete p1;
delete p2;
delete p3;
delete d1;
delete d2;
return 0;
}