Spravil by som to tak, že zoznam študentov, zamestnancov a pod. by som mal v std::list a vyhľadávacie funkcie by boli statické metódy tých tried, aby som sa vyhol dedeniu zo std::list. Čiže by si napr. študenta s nejakým identifikátorom našiel pomocou takejto funkcie:5. třídy: SeznamStudentů, SeznamZaměstnanců, SeznamZkoušek, SeznamDoktorandů - dětí z třídy ArrayList, a doplním pouze metody, jako např. najdiStudenta(int id), tiskSeznamu() apod.
Student* Student::najdi(int id, std::list<Student*>& zoznam)
Prípadne by si mohol použiť hešovaciu tabuľku (std::map<int, Student*>).