Froya Skrevet 9. november 2006 Skrevet 9. november 2006 Har et lite problem.. Hiearkiet mitt ser slik ut: Shape(Interface) ...... /..........\ TwoDim ThreeDim <- Begge abstrakte. |........\.................\ Circle Rectangle Sphere <- Konkrete Skal lage et testprogram, der jeg skal legge objekter av alle konkrete klassene i en Shape tabell. Foreløpig ser main metoden slik ut: int main() { TwoDim* oneCircle = new Circle(3, 5, 7, 13, 6, 4); TwoDim* oneRectangle = new Rectangle(8, 4, 3, 24, 32); ThreeDim* oneSphere = new Sphere(17, 9, 14, 25, 42, 19, 27); Shape* shapeTable[3]; shapeTable[0] = oneCircle; shapeTable[1] = oneRectangle; shapeTable[2] = oneSphere; cout << "Area of oneCircle: " << shapeTable[0]->functionX() << endl; cin.get(); return 0; } Problemet kommer når jeg prøver å få tilgang til funksjonene i sub klassene. Får kun tilgang til funksjoner som ligger i Shape klassen. Har prøvd å downcaste med hjelp av dynamic_cast uten hell.
einaros Skrevet 9. november 2006 Skrevet 9. november 2006 Du kan ikke bruke funksjoner som er definert for første gang i subklasser, om du refererer til objektet via superklasse. Du må flytte definisjonen, i form av virtuelle funksjoner (gjerne pure virtual) opp i supperklassene dine.
einaros Skrevet 9. november 2006 Skrevet 9. november 2006 Alternativet er å bruke RTTI og dynamic_cast, som du selv nevner, så lenge du er klar over at dette medfører både små-skitten kode og ekstra overhead.
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå