Ik ben momenteel bezig met een taakbalken systeem wat momenteel als volgt is opgebouwd (C++) :
- er bestaan rijen, kolommen en taakbalken.
- Rijen kunnen kolommen en taakbalken 'vasthouden' en kolommen kunnen rijen en taakbalken vasthouden.
- simpel gezegd steekt het op de volgende manier in elkaar:
Elke rij/kolom heeft dus een lijst met BasisElementen. Nu hebben 'Rijen/Kolommen' andere functies nodig dan een 'Taakbalk'.
Nu kan ik op basis van de functie IsTaakBalk() bepalen of het een rij/kolom of een taakbalk is. Nu kan ik vervolgens een element uit de lijst op basis hiervan casten naar het juiste type, en de specifice functies aanroepen.
Een ander methode zou zijn om alle functies als virtual voor beide types in de "BasisElement" te stoppen en op basis van de IsTaakBalk() de juiste functies aan kunnen roepen.
Nou is mijn vraag of hier nog betere/mooiere oplossingen voor te vinden zijn?
- er bestaan rijen, kolommen en taakbalken.
- Rijen kunnen kolommen en taakbalken 'vasthouden' en kolommen kunnen rijen en taakbalken vasthouden.
- simpel gezegd steekt het op de volgende manier in elkaar:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| base class BasisElement { public: virtual bool IsTaakBalk()=0; }; class Rij/Kolom:public BasisElement { private: BasisElement* elementen; // Vector met de verschillende elementen. public: bool IsTaakBalk() { return FALSE; } int AantalTaakBalken(); }; class Taakbalk:public BasisElement { public: bool IsTaakBalk() { return TRUE; } }; |
Elke rij/kolom heeft dus een lijst met BasisElementen. Nu hebben 'Rijen/Kolommen' andere functies nodig dan een 'Taakbalk'.
Nu kan ik op basis van de functie IsTaakBalk() bepalen of het een rij/kolom of een taakbalk is. Nu kan ik vervolgens een element uit de lijst op basis hiervan casten naar het juiste type, en de specifice functies aanroepen.
Een ander methode zou zijn om alle functies als virtual voor beide types in de "BasisElement" te stoppen en op basis van de IsTaakBalk() de juiste functies aan kunnen roepen.
Nou is mijn vraag of hier nog betere/mooiere oplossingen voor te vinden zijn?