Permalänk
Medlem

C++ Problem med arv

Hej!!

jag håller på att göra mitt egna "API" i c++ för HGE.

Jag har en bas klass som heter Component. Klasserna Button, Label, TextField är ärvande klasser från Component klassen.

Nu är det så att jag har en klass som heter ComponentHandler, i den här klassen hanterar jag komponenterna, jag har funktioner som addButton osv. I private har Jag dubbelpekare till klassen Component, dvs:

private:
Component** components;

jag har en publik medlemsfunktion som heter addButton.

i den skriver jag:

this->components[this->numberOfComponents] = new Button();

min fråga är nu: Hur kommer jag åt Buttons klassens egna publika funktioner. Eftersom components är dubbelpekare till basklassen Component kan jag ju bara se Component klassens medlemsfunktioner. Jag har funderat på casting med får det inte att fungera.

Hjälp uppskattas verkligen då jag har suttit fast med detta ett tag och behöver lösa det för att komma vidare, tack i förhand!:D

Permalänk
Medlem

varför har du gjort en dubbelpekare? om du bara ska typecasta får du väl typekasta om de till en buttonpekarpekare.
((Button**)components[num]) eller något sånt kanske?

Edit: Borde inte vector vara ett bättre val istället för array? antar de va därför du hade pekarpekaren, för att dynamiskt allokera arrayen. kom jag på

Visa signatur

Laptop - MacBook 2.0GHz, 4GB ram, Intel GMA 950
Stationär - i5 3570k @ 4ghz, 8gb ram, 120gb ssd + 2tb hdd, Windows 8 64bit, fractal design arc
Citera så jag hittar tillbaka :)

Permalänk
Medlem

Tack för ditt snabba svar!;)

ja det var just därför jag använde dubbelpekare;) samt för att vi i undervisningen har använt oss av arrayer ist för vectorer för lärarna tycker vi "lär oss mycket bättre då";)

är dock riktigt kass på casting därför jag sitter här hehe:)

menar du typ såhär då?:
NumButton **temp = new NumButton*();
temp= ((NumButton**)components[this->numberOfComponents]);
(för får nämligen inte det att funka ^^)

Permalänk
Medlem

TACK!!

det löste sig!!;)

det var det med castingen;) suttit lite för länge framför datorn bara;)

Permalänk
Medlem

fast hmm, det är ju bara components som ska vara pekarpekare iofs.

det du gör där är föresten väldigt dumt. först säger du temp är en ny knapp, sen säger du att temp är något ifrån en lista, då försvinner referensen till den första knappen och den ligger och skräpar i minnet.

kom på de borde nog vara typ
NumButton* temp;
temp = ((NumButton*)components[this->numberOfComponents]);

tror jag

Visa signatur

Laptop - MacBook 2.0GHz, 4GB ram, Intel GMA 950
Stationär - i5 3570k @ 4ghz, 8gb ram, 120gb ssd + 2tb hdd, Windows 8 64bit, fractal design arc
Citera så jag hittar tillbaka :)

Permalänk
Medlem

Ah du har ju rätt!

sen efter att jag har gjort vad jag ska skriver jag bara:

this->components[this->numberOfComponents] = temp;

tack som f#n! sjukt gött!;) du vet inte hur länge jag har suttit med detta tack tack!

Permalänk
Medlem
Skrivet av Jeppe91:

Ah du har ju rätt!

sen efter att jag har gjort vad jag ska skriver jag bara:

this->components[this->numberOfComponents] = temp;

tack som f#n! sjukt gött!;) du vet inte hur länge jag har suttit med detta tack tack!

vänta.. jag fattar inte va du håller på med så först ska du säga att temp är något i arraygen, och sen säga att något i arrayen är temp? :S

Visa signatur

Laptop - MacBook 2.0GHz, 4GB ram, Intel GMA 950
Stationär - i5 3570k @ 4ghz, 8gb ram, 120gb ssd + 2tb hdd, Windows 8 64bit, fractal design arc
Citera så jag hittar tillbaka :)