Dat bedoelde ik niet nee. Ik ken C# niet, het ziet er in ieder geval afschuwelijk uitquote:Op woensdag 5 januari 2011 11:44 schreef _Led_ het volgende:
[..]
Want in C# kun je niet
[ code verwijderd ]
schrijven bedoel je ?
Preciesquote:Op woensdag 5 januari 2011 12:56 schreef thabit het volgende:
Dit is natuurlijk een stuk beter:
[ code verwijderd ]
Och, die regel kun je ook een heel stuk compacter schrijven hoor, net zoals dat stuk C++ trouwens.quote:Op woensdag 5 januari 2011 13:38 schreef Thomass het volgende:
Dat bedoelde ik niet nee. Ik ken C# niet, het ziet er in ieder geval afschuwelijk uit
Ja lelijke code willen we natuurlijk niet hebben hèquote:Op woensdag 5 januari 2011 13:40 schreef _Led_ het volgende:
[..]
Och, die regel kun je ook een heel stuk compacter schrijven hoor, net zoals dat stuk C++ trouwens.
Als je wilt kun je in elke taal lelijke code schrijven
Totdat de stack vol zit, daarna krijg je een segfault.quote:Op donderdag 6 januari 2011 00:25 schreef TeringHenkie het volgende:
On-topic, er ging voor mij een hele wereld open toen ik er achter kwam dat je objecten gewoon op de stack aan kan maken ipv. alleen maar op de heap. Hoe ver kun je daar mee gaan?
Dus kleine objecten op de stack, grote op de heap zodat die niet gefragmenteerd raakt?quote:Op donderdag 6 januari 2011 10:00 schreef thabit het volgende:
[..]
Totdat de stack vol zit, daarna krijg je een segfault.. Hangt dus van je stackruimte af en van de grootte van de objecten. Het lijkt me sowieso raadzaam om zuinig om te gaan met stackruimte in het algemeen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | enum Name{ sub1,sub2 }; class Master{ protected: Name _NAME; }; class Sub1:public Master{ _NAME = sub1; }; class Sub2:public Master{ _NAME = sub2; }; |
Je zou bijvoorbeeld een memberconstante aan kunnen maken die je bij de een initialiseerd op een andere waarde dan bij de ander. Maar ik geloof dat er betere oplossingen zijn, al weet ik niet precies welke (in c# had je typeof(), maar ik geloof niet dat er zoiets is in c++)quote:Op vrijdag 7 januari 2011 14:52 schreef netolk het volgende:
Hey, zou deze code anders kunnen?
[ code verwijderd ]
Ik wil deze classes in een vector<Master> stoppen, maar dan wil ik wel weten wat voor class (sub1,sub2) het is.
Is daar een andere oplossing voor dan een enum?
Die member constante komt dan toch ongeveer overeen met de oplossing die ik had bedacht?quote:Op zaterdag 8 januari 2011 14:17 schreef minibeer het volgende:
[..]
Je zou bijvoorbeeld een memberconstante aan kunnen maken die je bij de een initialiseerd op een andere waarde dan bij de ander. Maar ik geloof dat er betere oplossingen zijn, al weet ik niet precies welke (in c# had je typeof(), maar ik geloof niet dat er zoiets is in c++)
o, had ik niet gezienquote:Op zaterdag 8 januari 2011 21:43 schreef netolk het volgende:
[..]
Die member constante komt dan toch ongeveer overeen met de oplossing die ik had bedacht?
Je kunt met een dynamic_cast checken of een een pointer naar een base class naar een gegeven afgeleide klasse verwijst. Zie http://en.wikibooks.org/wiki/C++_Programming/RTTIquote:Op vrijdag 7 januari 2011 14:52 schreef netolk het volgende:
Hey, zou deze code anders kunnen?
[ code verwijderd ]
Ik wil deze classes in een vector<Master> stoppen, maar dan wil ik wel weten wat voor class (sub1,sub2) het is.
Is daar een andere oplossing voor dan een enum?
Zo'n dynamic cast kost zeker wel weer veel resources of niet?quote:Op zondag 9 januari 2011 19:19 schreef thabit het volgende:
[..]
Je kunt met een dynamic_cast checken of een een pointer naar een base class naar een gegeven afgeleide klasse verwijst. Zie http://en.wikibooks.org/wiki/C++_Programming/RTTI
Valt wel mee denk ik, volgens mij bepaalt hij de validiteit van de cast aan de hand van de vtable.quote:Op zondag 9 januari 2011 21:39 schreef netolk het volgende:
[..]
Zo'n dynamic cast kost zeker wel weer veel resources of niet?
Ow ok, het ziet er wel handiger uit dan zo'n member te maken waar je aan kunt zien wat het isquote:Op zondag 9 januari 2011 21:45 schreef thabit het volgende:
[..]
Valt wel mee denk ik, volgens mij bepaalt hij de validiteit van de cast aan de hand van de vtable.
Maar hoe doe je zo iets dan?quote:Op zondag 9 januari 2011 22:07 schreef thabit het volgende:
Je kunt bijvoorbeeld ook een virtual method is_Sub1 aanmaken, die false returnt in de base class en true in Sub1. Lijkt me wat schoner dan met rtti kloten.
1 2 3 4 5 6 7 8 | class Base { public: virtual bool is_Sub1() const {return false;} }; class Sub1: public Base { bool is_Sub1() const {return true;} }; |
Ja, waarschijnlijk is het het best om met templates te werken enzo maar dat moet ik dan weer opzoeken hoe dat werkt en dit snap ik teminste redelijk...quote:Op maandag 10 januari 2011 15:16 schreef thabit het volgende:
Die const kun je ook weglaten. Is alleen om de compiler te vertellen dat de methode niet aan de members van de klasse loopt te frunniken.
Ik denk persoonlijk echter, dat als je een klasse hebt met 7 subklassen waarvoor je type-identificatie nodig hebt, dat dan zeer waarschijnlijk je design voor verbetering vatbaar is.
Ja dat had ik dus eerst maar toen vroeg ik of het beter kon en kwam er dus die rtti dingen voorquote:Op maandag 10 januari 2011 19:11 schreef TeringHenkie het volgende:
Je kan toch ook een pure virtual method maken in je base class die een waarde uit een enum typeofsubclass oid. returnet? Of denk ik nu te simpel?
1 2 3 4 5 6 7 8 9 | #ifndef _HEADERA_H #define _HEADERA_H #include "HeaderB.h" namespace A{ class A_Class{ B::B_Class _DINGES; }; }; #endif |
1 2 3 4 5 6 7 8 9 | #ifndef _HEADERB_H #define _HEADERB_H #include "HeaderA.h" namespace B{ class B_Class{ A::A_Class *_BLA; }; }; #endif |
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |