Na veel met java gemaakt te hebben ben ik sinds kort (eindelijk) eens met C++ begonnen. De applicatie die ik moet maken is qua grafische output en geheugen gebruik waarschijnlijk net iets te veel voor java, en daarnaast is het realtime aspect ook redelijk van belang zodat de keuze al snel op C++ gevallen is.
Als java gebruiker loop ik echter tegen een paar dingen aan die mij niet zo heel erg aanstaan. Nu zijn het niet onoverkomelijke problemen, maar ik wil het het liefst wel gelijk goed doen en mezelf niet een ranzige coding style aanmeten. Vandaar de volgende vraagjes:
1 Ik heb een class gemaakt. De definitie van deze class staat in de header file en de methoden zelf in de cpp file. Wat ik echter een beetje lelijk/tegenstrijdig/onoverzichtelijk vind is dat in die header file dus ook de private methoden en variabelen staan. Is er niet een nette manier om ervoor te zorgen dat in de header file alleen het public gedeelte van de class staat en in de cpp file het private gedeelte? Of hoort dit gewoon zo.
2 Het lukt me niet om een initiele waarde aan variabelen te geven in die class. In java kun je bv boolean blaat=false doen en zodra de class dan wordt aangemaakt wordt die boolean op false geinitialiseerd. Ik heb dit nu opgelost door in elke constructor een private _initVars() methode aan te roepen die alle variabelen hun initiele waarde geven. Is daar niet een mooiere oplossing voor?
3 In mijn class maak ik gebruik van een stuk dynamisch gealloceerd geheugen. Dit alloceren gebeurt met de private methode _allocArray(size...). Aan het begin van deze methode wil ik echter controleren of er niet al een stuk geheugen gealloceerd is om dit eerst vrij te kunnen geven. Nu dacht ik dat gewoon te kunnen doen door de pointer naar dat stuk geheugen te vergelijken met null, maar dan kreeg ik een segmentation error. Ik heb het nu opgelost door een extra boolean (_isAllocated) te gebruiken die wordt geinitialiseerd op false in die _initVars methode van de vorige vraag. Zelf vind ik deze oplossing een beetje lelijk, is daar niet een betere constructie voor?
PS: ik probeer ANSI C++ te schrijven en gebruik de gnu compiler onder Linux.
Als java gebruiker loop ik echter tegen een paar dingen aan die mij niet zo heel erg aanstaan. Nu zijn het niet onoverkomelijke problemen, maar ik wil het het liefst wel gelijk goed doen en mezelf niet een ranzige coding style aanmeten. Vandaar de volgende vraagjes:
1 Ik heb een class gemaakt. De definitie van deze class staat in de header file en de methoden zelf in de cpp file. Wat ik echter een beetje lelijk/tegenstrijdig/onoverzichtelijk vind is dat in die header file dus ook de private methoden en variabelen staan. Is er niet een nette manier om ervoor te zorgen dat in de header file alleen het public gedeelte van de class staat en in de cpp file het private gedeelte? Of hoort dit gewoon zo.
2 Het lukt me niet om een initiele waarde aan variabelen te geven in die class. In java kun je bv boolean blaat=false doen en zodra de class dan wordt aangemaakt wordt die boolean op false geinitialiseerd. Ik heb dit nu opgelost door in elke constructor een private _initVars() methode aan te roepen die alle variabelen hun initiele waarde geven. Is daar niet een mooiere oplossing voor?
3 In mijn class maak ik gebruik van een stuk dynamisch gealloceerd geheugen. Dit alloceren gebeurt met de private methode _allocArray(size...). Aan het begin van deze methode wil ik echter controleren of er niet al een stuk geheugen gealloceerd is om dit eerst vrij te kunnen geven. Nu dacht ik dat gewoon te kunnen doen door de pointer naar dat stuk geheugen te vergelijken met null, maar dan kreeg ik een segmentation error. Ik heb het nu opgelost door een extra boolean (_isAllocated) te gebruiken die wordt geinitialiseerd op false in die _initVars methode van de vorige vraag. Zelf vind ik deze oplossing een beetje lelijk, is daar niet een betere constructie voor?
PS: ik probeer ANSI C++ te schrijven en gebruik de gnu compiler onder Linux.
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'