Video: Population Genetics: When Darwin Met Mendel - Crash Course Biology #18 2025
Som et hegnstriddler understøtter C ++ både tidlig og sen binding. Ethvert givet programmeringssprog kan understøtte enten tidlig eller sen binding baseret på dets udviklere. Ældre sprog som C plejer at støtte tidligt bindende alene. Nylige sprog som Java og C # understøtter kun sen binding.
Du kan blive overrasket over, at standard for C ++ er tidligt bindende. Udgangen af OverloadOverride -programmet, som det vises, er som følger:
Vi er i Student:: calcTuition Vi er i Student:: calcTuition Tryk Enter for at fortsætte …
Grunden er enkel, hvis den er lidt dateret. For det første skal C ++ handle så meget som C som muligt som standard for at beholde opad kompatibilitet med sin forgænger. For det andet tilføjer polymorfisme en lille smule overhead til alle funktionsopkald, både hvad angår datalagring og kode, der er nødvendige for at udføre opkaldet. Grundlæggerne af C ++ var bekymrede over, at eventuelle ekstra overhead ville blive brugt som en grund til ikke at vedtage C ++ som systemets valgmulighed, så de gjorde den mere effektive tidlige bindende standard.
virtuel som vist i følgende ændring til erklæringen i OverloadOveride < program: klasse studerende {public: virtual void calcTuition () {cout << "vi er i Student:: calcTuition" << endl;}}; Nøgleordet
virtuelt
, der fortæller C ++, at calcTuition () er en polymorf funktion. Det vil sige at erklære calcTuition () virtuelle midler, at opkald til det vil blive bundet sent, hvis der er nogen tvivl om typen af objektets driftstid med hvilken calcTuition () kaldes.
med calcTuition () deklareret virtuel genererer følgende output: Vi er i Student:: calcTuition Vi er i GraduateStudent:: calcTuition Press Indtast for at fortsætte … Hvis du er komfortabel med debuggeren, der følger med dit C ++-miljø, skal du virkelig enkelt trin gennem dette eksempel. Det er så sejt at se programmet single-step i Student:: calcTuition () første gang, fn () kaldes men ind i GraduateStudent:: calcTuition () på det andet opkald. Du kan ikke virkelig sætte pris på polymorfisme, før du har prøvet det.
Du skal kun oplyse funktionen i basisklassen. "Virtuelt" overføres automatisk til underklassen. Nogle gange følger programmørerne dog kodningsstandarden for at erklære funktionen virtuel overalt (næsten).