Unter einer Arrayklasse verstehe ich einen Datentyp, der parallel verlaufende Arrays managed.
Dabei ist Segments die Array-Klasse und Segment ein Handle, dass lediglich Referenzen (ref) enthält.
Segment contains
{
public parallel ref:
StartPoint has Point;
TargetPoint has Point;
public copy:
Color;
bool isInvalid() { return StartPoint == TargetPoint; }
construct( StartPoint );
};
Segments parallels Segment {} // hier handelt es sich nicht um eine Ableitung,
sondern Segments wird zu eine Containerklasse, die für
parallele Elemente von Segment ein Array aufbaut.
contains
{
public:
Color; // Farbe aller Segmente - hierauf wird keine Referenz gebildet, da kein ref
public construct( Point {} as StartPoint, Color )
{
foreach( Segment s in this ) // ein Segment ist ein Element der Array
s.TargetPoint = s.StartPoint;
}
};
sa as Segments( { Point( 1, 2, 3 ), Point( 4, 5, 6 ) }, Color::Red );
s as sa[0]; // implizite Deklaration als Segment
s.isInvalid then print( "Start und Endpunkt sind gleich\n" );
s ist ein Handle, dass eine Referenz auf Startpunkt[0] von sa hat, eine Referenz auf Tartgetpunkt[0] von sa hat und eine Kopie von Color.
Segments parallels Segment [] verwendet hierbei Listen statt Arrays