eveniment de prelucrare de implementare pe c - software

Eveniment (eveniment) se numește un apel de ieșire. Acest termen este, probabil, familiar celor care lucrează cu limbi, cum ar fi Delphi, Visual Basic, etc. Când are loc un eveniment, există un apel de manipulare sale. Deoarece obiectul de inițiere evenimente nu poate ști nimic despre Handler, evenimentul se numește un apel de ieșire. munca eveniment se face pe principiul „de la un obiect la câteva.“ Este important de remarcat că evenimentul (eveniment) și mesajul (mesaj) sunt concepte diferite. Mesajul este numit o provocare directă, care se transmite de la un obiect la altul. Adică, există un handler mesaj.

Evenimentele sunt folosite destul de larg. Exemple sunt diferite biblioteci care implementează interfața grafică cu utilizatorul a utilizatorului. Dar evenimentele atunci când sunt utilizate corect, poate fi un lucru foarte util Din păcate, istoric, ca în C ++ Nu există evenimente. Prin urmare, dacă este necesar, dezvoltatorii să le pună în aplicare la bibliotecă. Aici, aici este realizarea unei astfel de bibliotecă. Ea are două clase: Delegat și evenimente.

Clasa Delegat (delegat)

clasa Delegat extinde conceptul de indicator de funcție. Folosind această clasă, puteți transmite o trimitere la metoda de obiect-delegat. Un alt obiectiv delegat poate fi transmis la codul de client, care poate provoca în mod indirect metoda. În acest caz, codul care manipulează delegatul nu știe ce fel de metodă în spatele ei. avantaj delegat este că puteți trece în mod dinamic un pointer la metodele și, prin urmare, schimba comportamentul programului fără recompilare a codului de client. Un program care folosește un delegat să rămână blissfully ignoranți cu privire la tehnicile de manipulare și de proprietarii lor.

Exemple de utilizare a delegatului clasa

Rezultatele acestui program sunt următoarele:

Să examinăm în detaliu programul. Inițial, includem delegatul antet clasa fișier:

Delegatul transmite apelul funcției la care. În cazul în care delegatul conține un NULL, ignorriruetsya de apel. În continuare vom schimba funcția indicat de către delegatul:

Pentru a demonstra efectul rezultat re-face apel. Astfel, există un test funcția de apel :: SayGoodBye ().

Acest exemplu este destul de simplu, dar totuși demonstrează capacitățile deținute de delegații și principalele lor avantaje.

Exemplul №2: O mică bază de date

Dar cea mai importantă funcție în clasă, și, eventual, în întregul program este funcția ProcessStaff (Delegat ). Cu această metodă este posibil ca fiecare dintre lucrătorii din _staff de colectare, apelați metoda care se află în spatele delegatul. Pe lângă principalele funcții principale ale programului sunt realizate mai multe astfel de apeluri.

Clasa contabil oferă următoarele caracteristici. Acesta vă permite să păstrați o înregistrare de a lucra cu AddEmployeToAccount metoda (employe *). Atunci când se efectuează această metodă _count lucrătorii contra este incrementat cu 1, iar _totalWage salarială totală adăugată salariului angajatului care este calculată utilizând metoda employe :: CalculateWage (). GetTotalWage () returneaza suma de bani care se plătește tuturor lucrătorilor ca salariile. GetAverageWage () calculează salariul mediu al întreprinderii.

În cele din urmă a fost timp pentru a scrie funcția principală a programului. Punerea sa în aplicare este prezentată mai jos

Ieșirea programului este prezentată în figura de mai jos

Vom înțelege ce se întâmplă în program. În primul rând, trebuie remarcat noua clasa, care îndeplinește funcții auxiliare cea mai mare parte. Această clasă se numește EmployeTester. Ea are două metode. Prima dintre ele - PrintInfo (employe *) imprimă informații despre angajat, care este trecut la ea ca un parametru. A doua metodă AddEmployes (EnterpriseDB *) doar completează în baza de date a câțiva angajați.

Și acum să discutăm principalele caracteristici ale programului. Este în acest loc cele mai importante evenimente asociate cu utilizarea de delegați. În primul rând, programul creează o bază de date, un contabil și un EmployeTester obiect:

Apoi, la baza de date sunt introduse date pe trei angajați:

După instalare, slujitor vine taxe obiect EmployeTester. El afișează informații despre fiecare loc de muncă:

Și acum e timpul contabil pentru a calcula toți lucrătorii și de a determina salariul total și salariul mediu în întreprindere. Rezultatele sunt afișate pe ecran:

Să rezuma. Delegații convenabil să se aplice în următoarele cazuri:
  • Ai nevoie de a apela doar o singură metodă
  • Apelantul nu are nevoie să știe despre obiectul care deține metoda
  • O clasă poate avea mai multe implementări ale aceleiași metode

Clasa Event (Eveniment)

Evenimentul în acest caz - este o modalitate pentru clasa de a informa clienții (clase, folosind clasa) care sa întâmplat cu el ceva interesant. Probabil modul cel mai familiar de a folosi evenimente - într-o interfață grafică cu utilizatorul (GUI). De obicei, clase care reprezintă controalele (controalele) o interfață grafică sunt evenimente care sunt declanșate atunci când utilizatorul face ceva cu un control (de exemplu, apăsări pe buton). Dar evenimentele pot fi utilizate nu numai în GUI. Evenimente obespechiayut mod foarte util pentru obiecte pentru a semnala o schimbare în statutul său. Și această schimbare poate fi important pentru clienții obiectului. Evenimente - acestea sunt blocuri importante pentru crearea de clase care pot fi refolosite în mai multe programe. Evenimentele sunt utilizate în mod direct cu delegații. Este important să ne amintim că obiectele - delegații inkapsultruyut (ascunde) metoda a clasei, și poate fi numit anonim. Eveniment - o modalitate de a apela metodele de alte obiecte, atunci când un eveniment este declanșat. Aceasta este, laturei obiect impinge un pointer la o metodă în delegatul (așa cum este prezentat anterior) și trece delegat la eveniment. Atunci când un eveniment este declanșat delegat de trei luni, și, astfel, metoda, care a fost dat să-l.

Exemplu de clasa Event

Ieșirea programului este prezentată mai jos în figură.

Discutați despre cod. În acest program, trei clase sunt implicate. În primul rând, ia în considerare clasa de culoare. care descrie culoarea. În ea există următoarele componente:
  • componente roșu, verde și albastru de culoare (RGB)
  • șir de afișare. prednaznvchennaya pentru a afișa pe ecran culori

Pentru comoditatea de a face cu o clasă sunt declarate mai multe constante statice - alb, negru, roșu, verde, albastru. Utilizați clasa de culoare, după cum urmează:

ToString () funcția convertește valoarea culorii într-un șir.

Următoarea clasă numită View. Acesta conține o variabilă determină culoarea. Clasa oferă metode pentru a obține / a seta valoarea culorii - este respectiv GetColor / setcolor. De asemenea, în sala de clasă View caracteristici eveniment ColorChanged. care este declanșat atunci când un program modifică valoarea de culoare, de exemplu, determină metoda setcolor.

Newview - este derivat din clasa View. Sarcina lui este de a adăuga o funcție la eveniment ColorChanged. care aparține strămoșul său. Acest lucru se face în newview constructor:

După cum se poate observa, în scopul de a transmite funcția sa trebuie să creeze mai întâi un eveniment pentru ea delegat înveliș vvide, și apoi „adăugați“ delegatul la eveniment + = operator.

„Observator“ evenimente (EventListener) de fapt, de asemenea, vine ca newview de clasă. El primește un pointer la vedere și adaugă la eveniment ColorChanged EventListener metoda sa :: React ():

Metoda EventListener :: Detașare () deconecteaza de la eveniment metoda lui React:

Detașare metodă, de asemenea, apare ca conexiunea este utilizată numai operatorul - =.

Luați în considerare principalele caracteristici ale programului. În primul rând, programul creează un EventListener obiecte și newview și afișează valoarea culorii inițiale în newview obiectului:

Trebuie remarcat faptul că în acest moment, la eveniment ColorChanged două metode sunt atașate - este newview :: OnColorChanged () și EventListener :: React (). Puteți verifica acest lucru prin schimbarea culorii de setcolor. Ca urmare a celor de mai sus două funcții vor fi numite. EventListener obiect suplimentar a făcut detașarea metodei sale pe eveniment. Metoda Recall setcolor vedem că doar o singură metodă de a răspunde la un eveniment - newview :: OnColorChange ():

comentarii recente

Dacă doriți să utilizați delegatului și clasele de evenimente în proiectele lor, conectați-le Delegate.h fișiere, Event.h, EventBase.h și EventBase.cpp.

articole similare