A
Hem, dein Problem hab ich nicht so ganz verstanden. Auf Arbeit bin ich übrigens auch dabei, ein Grafiktool mit Vektorgrafik-Elementen zu entwickeln. Ich habe das ganze so gelöst:
AbstractSKD
/\
||
AbstractShape
SKD heißt das System, an dem ich arbeite, nicht verwirren lassen. Jedenfalls habe ich alle meine Grafikobjekte (Kreise, Rechtecke, Pfeile, Bemerkungstexte usw.), die die Benutzer auch frei verschieben, kopieren usw. können, von AbstractShape abgeleitet. Wenn ich jetzt, wie du, auch Verbindungslinien bräuchte, würde ich diese (also die Verbindungsline selbst) ebenfalls von AbstractShape ableiten.
Damit aber eine Connection zwischen zwei Shapes existieren kann, kannst du ja eine Membervariable vom Typ AbstractShape hinzufügen.
class Circle : public AbstractShape
{
private:
AbstractShape* connected;
};
Machste noch setter und getter mit rein. Das müsste doch reichen?
Wenn aber ein solches Objekt mehrere Ankerpunkte haben kann, machste einfach einen std::vector<AbstractShape*> rein. Oder bei dem Verbindungslinien-Objekt, einen leftConnected und einen rightConnected.
Mit einer gemeinsamen Basisklasse kannste alles erschlagen. Ich habe z.B. auch die Abteilungen und die Benutzer selbst von AbstractSKD abgeleitet, so das ich auch mehrere Grafikfolien realisieren kann, und die Benutzer Parallel an einer Zeichnung arbeiten können.