Video: Tutorial: Despre clase si polimorfism in C# 2024
Ca un straddler de gard, C ++ susține legarea atât timpurie, cât și târzie. Orice limbaj de programare dat poate susține fie legătura timpurie, fie târzie, bazată pe capriciile dezvoltatorilor săi. Limbi mai vechi, cum ar fi C, au tendința de a sprijini legarea timpurie numai. Limbile recente, cum ar fi Java și C #, suportă numai legarea târzie.
S-ar putea să fiți surprins că implicit pentru C ++ este obligatoriu devreme. Ieșirea programului OverloadOverride așa cum apare este următoarea:
Suntem în Student:: Calculează Suntem în Student:: Calculează Apăsați Enter pentru a continua …
Motivul este simplu, dacă este puțin datat. Mai întâi, C ++ trebuie să acționeze la fel de mult ca și C, în mod implicit, pentru a păstra compatibilitatea ascendentă cu predecesorul său. În al doilea rând, polimorfismul adaugă o cantitate mică de cheltuieli generale la fiecare apel de funcții, atât în ceea ce privește stocarea datelor, cât și codul necesar pentru a efectua apelul.
Fondatorii C ++ s-au preocupat de faptul că orice tip de cheltuieli adiționale ar fi folosit ca motiv pentru a nu adopta C ++ ca limbajul de sistem ales, astfel încât au făcut ca obligațiile anticipate să devină mai eficiente.
virtual
care spune C ++ că calcTuition () este o funcție membră polimorfică. Aceasta înseamnă că declararea calculelor virtuale înseamnă că apelurile către ele vor fi legate târziu dacă există vreo îndoială cu privire la tipul de execuție al obiectului cu care se numește calcTuition ().
cu calcTuition () declarat virtual generează următoarea ieșire: Suntem în Student:: calcTuition Suntem în GraduateStudent:: calcTuition Press Introduceți pentru a continua … Dacă sunteți confortabil cu aplicația de depanare care vine cu mediul C ++, trebuie să faceți un singur pas prin acest exemplu. Este minunat să vedeți programul cu un singur pas în Student:: calcTuition () prima dată când fn () este chemat, dar în GraduateStudent:: calcTuition () la al doilea apel. Nu puteți aprecia cu adevărat polimorfismul până când nu îl încercați.
Trebuie să declare funcția virtuală numai în clasa de bază. "Virtuozitatea" se duce automat la subclasa. Uneori, însă, programatorii respectă standardul de codare de declarare a funcției virtuale pretutindeni (practic).