Vererbung
            
Vererbung  
 Inhaltsverzeichnis  1. Beispiel  2. Zugriffsrechte  3. Virtuelle Methoden  4. Zugriff auf Objekte einer Klasserhierarchie mittels Zeigern  5. Abstrakte Klassen  6.
 Mehrfachvererbung 
1. Beispiel: graphisches System für Punkte, Kreise, Linien, Kreisbögen 
Klassendiagramm 
Vereinbarung der abgeleiteten Klassen 
Implementierung 
zurück zum Inhaltsverzeichnis  
2. Zugriffsrechte 
- steuern die Zugriffs-Erlaubnis auf die Eigenschaften und Methoden einer Klasse. 
 private:   nur die Methoden der eigenen Klasse können zugreifen, 
 protected: die eigenen Methoden und die Methoden der abgeleiteten Klassen dürfen zugreifen, 
 public:    alle (auch die Methoden fremder Klassen und "normale" Funktionen) dürfen zugreifen.
- bei "braver" Datenkapselung: alle Eigenschaften private, einige (wenige) Methoden public 
- Beispiel: 
- Zugriffsrechte der geerbten Elemente können in der abgeleiteten Klasse eingeschränkt werden: 
 class Aklasse: public Bklasse (..
.);      Zugriffsrechte der geerbten Elemente bleiben unverändert
 class Aklasse: protected Bklasse (...);   alle geerbten public-Elemente sind in Aklasse protected
 class Aklasse: private Bklasse (..
.);     alle geerbten public- und protected-Elemente sind in Aklasse private (Default!!!)
zurück zum Inhaltsverzeichnis  
3. Virtuelle Methoden 
"Frühe Bindung":  beim Aufruf einer Element-Funktion wird die Sprung-Adresse bereits zum Übersetzungs-Zeitpunkt festgelegt.
Beispiel:
Vorteil:    Speicherplatzsparend, schnell
Nachteil:   Klasse Circle muss MoveTo neu definieren, obwohl "logisch" gleicher Ablauf
"Späte Bindung":   beim Aufruf der Element-Funktionen wird die tatsächliche Sprungadresse erst zur Laufzeit
                   ermittelt (Compiler erzeugt einen "indirekten" Sprung über die sogenannte V-Table des Objekts).
                   Erreicht man in C++ mittels Schlüsselwort virtual.
Nachteil:   mehr Speicherplatz, langsamer
Vorteil:    Klasse Circle muss MoveTo nicht neu definieren, kann geerbte Funktion verwenden.
Beispiel:
Durch den Einsatz der späten Bindung wird "Polymorphie" (=Vielgestaltigkeit) sichergestellt: die gleiche
Methode ist je nach Objekt-Art unterschiedlich realisiert.
Wann muss eine Methode virtuell sein?
- wenn sie in den abgeleiteten Klassen unterschiedlich implementiert ist
- und  * wenn Sie in einer anderen Methode der Basisklasse aufgerufen wird oder
      * über einen Objekt-Zeiger vom Typ "Zeiger auf Basisklasse" aufgerufen wird
         Bsp.:    Point *tab [MAXANZ] = ...     // speichert Zeiger auf Point-,
               for (int i=0; i<anz; ++i)     // Circle-, Arc- und Line-Objekte
                 tab[i]->Show (); 
zurück zum Inhaltsverzeichnis  
4.
 Zugriff auf Objekte einer Klasserhierarchie mittels Zeigern 
- Zeiger vom Typ "Zeiger auf Basisklasse" sind in gewissem Umfang kompatibel zu 
  Zeigern vom Typ "Zeiger auf abgeleitete Klasse"
- z.B.:    Point *pp, p1(100,200);
         Circle *cp, c1 (100,200,50);
         pp = &c1;
         pp->MoveTo(120,220);
      // cout << pp->getRadius();      // nicht möglich, wenn getRadius Methode
                                       // von Circle ist
         cout << ((Circle*)pp)->getRadius();
      // cp = &p1;                     // nicht erlaubt, da sonst Zugriffe auf
                                       // nicht vorhandene Komponenten möglich
zurück zum Inhaltsverzeichnis  
5. Abstrakte Klassen 
- dient nur als Basisklasse für andere Klassen
- es können keine Objekte angelegt werden (allerdings Zeiger und Referenzen)
- enthält mindestens eine "abstrakte Funktion" (pure virtual function)
- abstrakte Funktion:
     - virtuelle Funktion, für die in der Basisklasse keine Implementierung existiert
       (da Implementierung nicht möglich oder nicht sinnvoll ist)
     - z.B.:     class APoint {
                  .
 
..
                  virtual void Show () = 0;    // abstrakte Funktion
                  ...
              };
- in den abgeleiteten Klassen müssen die abstrakten Funktionen durch "konkrete" Funktionen ersetzt werden 
zurück zum Inhaltsverzeichnis  
6.
 Mehrfachvererbung 
Objekte können auch von mehreren anderen Objekten erben 
Vereinbarung der mehrfach abgeleiteten Klassen 
Implementierung 
Das Problem bei der Mehrfachvererbung besteht darin, dass ein Objekt Eigenschaften auch mehrfach vererbt bekommen kann. zurück zum Inhaltsverzeichnis  
| Anmerkungen: | 
 | impressum | datenschutz
© Copyright Artikelpedia.com