Może od końca.
Czy mogę używać w klasie innych obiektów/zmiennych?
Tak. Albo podajesz odpowiednie zmienne przez argumenty funkcji albo tworzysz sobie zmienne (obiekty Twoich klas) w klasie - analogicznie jak definiujesz np. std::string name;.
Chciałbym teraz w klasie Treatment połączyć dwie klasy za pomocą klucza głównego. Czyli w przyszłości w klasie Treatment chciałbym zrobić metodę, która wyświetli mi ID, nazwę, opis, id pacjenta, imię i nazwisko pacjenta, id doktora oraz imię i nazwisko doktora. Jak najprościej osiągnąć taki efekt?
Możesz wykorzystać dwie zmienne instancyjne, czyli dodać do klasy pole typu Patient oraz pole typu Doctor.
class Treatment
{
public:
Treatment(int id, std::string name = "", std::string description = "")
private:
Patient patient;
Doctor doctor;
int id;
std::string name;
std::string description;
};
Możesz też zrobić inaczej - skoro każdy Twój pacjent oraz lekarz ma swoje unikalne ID, to w klasie Treatment możesz trzymać ich ID. Żeby w metodzie Treatment wykonać jakąś akcję na pacjentach czy lekarzach, potrzebowałbyś jeszcze przekazać przez argument adres wektora, w którym przechowujesz pacjentów czy lekarzy oraz oczywiście mieć jakąś funkcję, która wyszukuje Ci pacjenta czy lekarza po ID.