next up previous contents index
Next: Typanpassung Up: Klassen-Hierarchien und Vererbung Previous: Zugriff auf Basisklassen

Konstruktion und Destruktion

   Wird ein Objekt einer abgeleiteten Klasse erzeugt, wird implizit auch (je) eines der Basisklasse(n) kreiert

tex2html_wrap_inline5173 der Konstruktor der Basisklasse muß aufgerufen werden.

    class uhr
    { int std;
      int min;
     public:
      uhr(int s, int m) : std(s), min(m) {};
      uhr() : std(0), min(0) {};
      void show() { cout << std << ':' << min;}
    };
    
    class wecker : public uhr
    { int alarm_std;
      int alarm_min;
     public:
      wecker() : alarm_std(0), alarm_min(0) {}
      wecker(int s, int m, int as, int am) 
            : uhr(s,m), 
              alarm_std(as), 
              alarm_min(am) {}
      void show() { uhr::show();
                    cout << " || " 
                    << alarm_std << ':' 
                    << alarm_min;
                  }
    };

Reihenfolge der Konstruktion  

Die Reihenfolge der Konstruktoraufrufe für Basisklassen bzw. Elemente bestimmt sich aus der Reihenfolge der Deklaration (nicht aus der Anordnung der Liste)!

Reihenfolge der Destruktion   umgekehrt

Nicht erlaubt sind

Eine Klasse kann sowohl Basisklasse als auch Elementklasse sein:    

    // Besserer Wecker
    class wecker : public uhr
    { uhr alarmzeit;
     public:
      wecker() : alarmzeit(0,0) {}
      wecker(int s, int m, int as, int am) 
            : uhr(s,m), 
              alarmzeit(as,am) {}
      void show() { uhr::show();
                    cout << " || ";
                    alarmzeit.show();
                  }
    };

Initialisierung durch Kopie

Wird ein Objekt einer abgeleiteten Klasse durch Kopie initialisiert  

    wecker w1(11,30,7,15);
    wecker w2 = w1;

lassen sich vier Fälle unterscheiden:  

1.
Weder Basisklasse noch abgeleitete Klasse besitzt einen Copy-Konstruktor:

2.
Die Basisklasse besitzt einen Copy-Konstruktor, die abgeleitete Klasse nicht:

    uhr(const uhr& ori) : std(ori.std),
                          min(ori.min) {}

3.
Die abgeleitete Klasse besitzt einen Copy-Konstruktor, die Basisklasse nicht:

    wecker(const wecker & ori) 
           : uhr(ori),
             alarmzeit(ori.alarmzeit) {}
4.
Sowohl Basisklasse als auch abgeleitete Klasse besitzt einen Copy-Konstruktor:


next up previous contents index
Next: Typanpassung Up: Klassen-Hierarchien und Vererbung Previous: Zugriff auf Basisklassen

Peter Pfahler, 1997