Anoniem: 35845 schreef op 06 oktober 2002 @ 15:25:
Ik chargeer even

: dus jij bent ook tegen het gebruik van character pointers? Dat zijn ook arrays van primitives. Volgens jou zou ik dus in mijn string classes geen char * maar een std::vector<char> moeten gebruiken...
Ten eerste mijn excuus dat ik zo laat reageer
Ik zal even uitleggen waarom ik dus tegen char*/ array's ben, binnen een OO taal.
Bekijk het verschil even tussen C en C++. C++ is een uitbreiding op C zodat de procedurele taal C OO mogelijkheden krijgt. De compibaliteit tussen C en C++ is behouden, zodat met C++ zowel prodedureel als OO te programmeren is. Echter dat neemt niet weg dat C++ eigenlijk volledig OO is! Voor zover niets nieuws voor u
Je zit dus te werken binnen het OO paradigma. Dit houdt in dat je classes maakt, die horen fungeren als een black box. Een class zou ik graag definieëren als een verzaming variabelen die een 'ding/iets' representeren. De class staat op zichzelf en is verantwoordelijk voor de staat van zijn variabelen en _niemand anders_
Natuurlijk schieten primitieven hier weer buiten, het zou ook niet. Primitieven zie ik als noodzakelijk kwaad. Ze zijn nodig om de boel wat meer peper in z'n kont te geven, echter het bijhouden en verantwoordelijkheden ontbreken geheel, die zijn overgelaten aan de compiler.
Arrays kan ik in dit verhaal indelen bij de classes. Array's zijn immers variabelen die bij elkaar horen. Wat Array dus wel missen is de black box functionaliteit. Ik moet _alles_ gaan bijhouden voor die array wat ie zelf zou moeten doen! Als ik element 3 vraag en die outOfBounds dan moet niet het systeem over z'n nek gaan! Dat kan ik niet bij blackbox functionaliteit indelen iig.
Echter soms zijn array's gewoon noodzakelijk kwaad. Soms zijn ze nodig voor snelheid omdat een wrapper te veel overhead veroorzaakt. Tja, dan moet het nou eenmaal

Soms gaat snelheid voor design/veiligheid, maar die tendens is toch al aan het omslaan

Men schrijft meer in patronen dan ooit. Dit omdat de software steeds groter, steeds on-onderhoudbaarder wordt en de computers toch steeds sneller en dus de overhead niet echt merkbaar is

Het is natuurlijk waar dat je als je verwacht de code fors te gaan uitbreiden/veranderen/compliceren je beter een std::vector kunt gebruiken, don't worry ik ga er dan ook vanuit dat iedere zichzelf respecterende programmeur dit wel begrijpt. Er zijn alleen situaties waar het gebruik van een std::vector gewoon zware overkill is...
Gelukkig maar. Ga er trouwens maar van uit dat je code gaat bloaten, het is iig geen uitzondering.

Echter ik wil er echt nogmaals roepen dat er tegenwoordig niet echt vaak meer een reden is om array's te gebruiken, als je niet in de wereld van kernel's, highspeed 3D ed. zit. De meeste programma's zijn zo low level niet meer dat safety van code meer voorop staat dan raw speed.
En laten we het dan maar niet hebben over hastables. Die zijn altijd op basis van arrays dus die heb je wel degelijk nodig soms

Maar hashtables zijn wel safe! Hashtabels hebben een array gewrapt zodat je geen array hoeft te gebruiken. Feitelijk doen ze hetzelfde als vector, namelijk een safe datastructure bieden, maar dan net ff anders. Kijk als jij er elke keer voor wilt kiezen array ZELF te wrappen, be my guest, maar ik neem aan dat dit niet je levensdoel is