Problem rozwiązany dziekuje
0
2
Radzę bardziej popracować nad odpowiednim formatowaniem kodu i przyłożyć się do pracy w semestrze poprawkowym.
1
A nie prościej byłoby zapytać autora kodu? Ale w sumie mam dobry humor dzisiaj, masz return
w pętli także wyskoczysz z pętli jak znajdziesz pierwsze nazwisko.
if(nazwisko.compare((*Iter)->nazwisko)==0)
{
cout<<endl<<"#####\tZnaleziono Studenta\t#####"<<endl;
(*Iter)->wypisz_daneB();
cout<<endl<<"#####\t###################\t#####"<<endl;
return;
}
1
Z tego co widzę zupełnie nie rozumiesz koncepcji wzorca obserwator.
Generalnie chodzi o to, że obserwowany informuje o swoich zmianach stanu, a wszyscy obserwatorzy mogą podjąć działania z danym zdarzeniem.
Poglądowy kod:
class IOsoba {
public:
ostream &Opisz(ostream &) const;
void WezwijDoDizekanatu();
};
using OsobaPtr = std::shared_ptr<IOsoba>;
class Student : public IOsoba
{
…
};
using StudentPtr = std::shared_ptr<Student>;
class IObserwatorUczelni
{
public:
virtual void DodoanoOsobe(const OsobaPtr& osoba) = 0;
virtual void UsunietoOsobe(const OsobaPtr& osoba) = 0;
virtual void WyswietlonoOsobe(const OsobaPtr& osoba) = 0;
};
using ObserwatorUczelniWeakPtr = std::weak_ptr<IObserwatorUczelni>;
using ObserwatorUczelniPtr = std::shared_ptr<IObserwatorUczelni>;
class Uczelnia
{
public:
void PrzyjmiNaSudia(StudentPtr student)
{
osoby.push_back(student);
for (auto obserwatorWeak : obseratorzy)
if (auto obserwator = obserwatorWeak.lock())
{
obserwator->DodoanoOsobe(student);
}
}
…
private:
std::list<OsobaPtr> osoby;
vector<ObserwatorUczelniWeakPtr> obseratorzy;
};