C++ Initialiseringslista med arv från abstrakt klass
Tjena!
jag håller på att hacka ihop ett litet side scroller-spel baserat på C++ med Qt. Tänk 2D, rymdskepp som kan skjuta och undvika hinder.
De flesta klasser i spelet ärver av en otroligt generell abstrakt klass, "GameObject". Där finns generella medlemsfunktioner så som "moveRight()", "update()" osv osv. GameObject har också ett privat attribut "m_body", som representes av en QRect. Detta attribut används för att representera kanten runt ett objekt i spelet, till exempel spelarens rymdskepp, ett "skott" eller en asteroid. Spelarens skepp (kort och gott klassen "Ship") ärver direkt av "Gameobject". För att initiera "Ship" och tilldela värden till det privata attributet m_body i superklassen GameObject skriver jag följande i Ship:s konstruktör:
ship::ship() : gameObject(100, 350, SHIP_WIDTH, SHIP_HEIGHT)
där samtliga argument blir tilldelade till m_body.
Men! När jag vill skapa min första fiende, Enemy_one, hade det varit otroligt smidigt att ärva av "Ship" hellre än "GameObject", eftersom ett fiendeskepp kommer ha mycket gemensamt med spelaren skepp. Jag kan dock inte initiera denna på samma sett, eftersom "Ship" inte har ett privat attribut "m_body", det ligger ju i superklassen.
Nu tänker ni säkert att det bara är att skriva om det till att konstruktören i Ship blir sån här:
ship::ship(int xPos, int yPos, int width, int heigh) : GameObject(t100, 350, SHIP_WIDTH, SHIP_HEIGHT)
Och ändra till motsvarande i Enemy_one. Men då måste jag tydligen ha en default-konstruktör, och då är det alltid denna default-konstruktör som anropas av någon anledning.
TL;DR: Hur tilldelar jag attributet m_body i Gameobject sina värden i Enemy_one, som ärver av Ship som i sin tur ärver av GameObject?
Off topic: Finns det några kod-formaterings-taggar?