wzorzec obserwator cala lista

0

Problem rozwiązany dziekuje

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;
};

1 użytkowników online, w tym zalogowanych: 0, gości: 1