kramann.info
© Guido Kramann

Login: Passwort:










6.5 Die Lebensdauer von Objekten und das UML-Sequenzdiagramm

  • Nun ein sinnvolleres Beispiel:
  • Hier erzeugt die Funktion in dem Fabrik-Objekt beliebig viele Objekte vom Typ Vektor.
  • Um den Sinn zu verdeutlichen: Es wäre auch vorstellbar hier die Vektoren so zu belegen, dass sie Stützpunkte einer Geraden repräsentieren, deren Steigung und Aufpunkt mit übergeben wird.
  • In dem Programm "Gehtnicht.cpp" wird das Array als lokale Variable in der Funktion erzeugeVektoren(int anzahl) angelegt.
  • Der zugehörige Speicherbereich wird gelöscht, sobald die Funktion verlassen wird.
  • Das nachfolgende funktionierende Beisiel ist leider komplizierter:
  • In Geht.cpp wird das statt eines Arrays von Vektor-Objekten ein Array von Zeigern auf Vektor-Objekte erzeugt.
  • Zu den einzelnen zunächst leeren Zeigern müssen dann allerdings in der nachfolgenden Schleife erst noch Objekte erzeugt werden.
#include<iostream>
using namespace std;

class Vektor
{
     public:
         double x,y;
         Vektor()
         {
             x = 0.0;
             y = 0.0;
         }
};

class VektorFabrik
{
     public:
         Vektor* erzeugeVektoren(int anzahl)
         {
             Vektor v[anzahl];
             return v;
         }
};

int main(void)
{
    VektorFabrik fabrik;

    Vektor* v = fabrik.erzeugeVektoren(100);

    v[42].x = 7.0;
    v[42].y = 8.0;
 
    cout<<v[42].x<<endl;
    cout<<v[42].y<<endl;
   
    return 0;
} 

Code 6.5-1: "Gehtnicht.cpp" Version 2

#include<iostream>
using namespace std;

class Vektor
{
     public:
         double x,y;
         Vektor()
         {
             x = 0.0;
             y = 0.0;
         }
};

class VektorFabrik
{
     public:
         Vektor** erzeugeVektoren(int anzahl)
         {
             Vektor** v = new Vektor*[anzahl];
             for(int i=0;i<anzahl;i++)
                 v[i] = new Vektor();

             return v;
         }
};

int main(void)
{
    VektorFabrik fabrik;

    Vektor** v = fabrik.erzeugeVektoren(100);

    v[42]->x = 7.0;
    v[42]->y = 8.0;
 
    cout<<v[42]->x<<endl;
    cout<<v[42]->y<<endl;
   
    return 0;
} 

Code 6.5-2: "Geht.cpp" Version 2

Unter der Lupe:

  • Ein Array bestehend aus Zeigern auf Vektor-Objekten wird erzeugt:
  • Vektor** v = fabrik.erzeugeVektoren(100);
  • Den vorher ins Nichts zeigenden Zeigern werden Objekte zugewiesen, die im gleichen Schritt erzeugt werden:
  • for(int i=0;i<anzahl;i++) v[i] = new Vektor();