Gå til innhold

Tabell av objekter i forbindelse med arv.


Anbefalte innlegg

Skrevet

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.

Videoannonse
Annonse
Skrevet

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.

Skrevet

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.

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...