Die probleem is omdat mens hierdie objects op die stack verklaar word hulle memory tydens compile time toegeken. So daar word net genoeg memory vir n Vrugte tipe gehou alhoewel jy Appel aan hom kan gelykstel word al die extra funksies wat jy aan Appel gee gestroop en net die wat ooreenstem met Vrugte word gestoor.
Een oplossing is om funksie pointers te gebruik binne die funksies van jou base class. Byvoorbeeld om n funksie pointer binne die Groei() funksie van Vrugte te he. Na jy dan jou Vrugte object (myVrugte = myAppel;) geskep het point jy die funksie pointer na n funksie wat jy wil he geroep moet word wanneer Groei() geroep word. Dit werk en my eerste weergawe van Space Invaders het so gehardloop.
Maar C++ maak dit makliker met die Virtual keyword wat mens kan gebruik wanneer jy n funksie binne jou base class (Vrugte) verklaar. Wat Virtual doen is basies dieselfde as daai eerste metode van my, agter die skerms maak hy die funksie eindlik n funksie pointer. So wanneer jy n nuwe class skep wat inherit van n base class wat Virtual funksies het dan is dit eindlik pointers na daai funksies. Dit beteken dat as jy n Appel object gelyk stel aan n Vrugte object dan word die funksies nie konkreet in memory gestoor nie maar eerder pointers na daai funksies. Die enigste vereiste vir dit om te werk is dat jou object dan nie meer op die stack gestoor kan word nie.
Dis goed jy noem van die pointer. My idee met voorwerp is dat die modelklas ‘n updateStates virtual funksie het, maar ek wil hierdie amper eers by compile tyd define. Ek weet nog nie of dit moontlik is vir hoe ek dit wil gebruik, maar as ek die ponter gebruik mag dit werk. Basies elke vyand gaan moontlik sy eie beweeging kan hê, maar die basiese vyand-model gaan dieselfde wees.