Hilfreich für das Verständnis ist die Analogie Vererbung leider erst dann, wenn man schon etwas Übung damit hat. Umschreibungen wie Unterfunktion oder Ableitung hätten es wohl auch getan.

Jedenfalls hat Vererbung direkt mit Klassen zu tun. Sie brauchen eine Klasse, und beziehen sich mit abgewandelter Funktionsweise wieder auf diese Klasse. Beides wird vom Programm aufgerufen und daraus entstehende Werte geliefert.

Grundlegend geht es um die Grundfunktion und ihre veränderten Unterfunktionen. Dabei spricht man gern mal von Eltern und ihren Kindern

Sofern es sich nicht um Variablen Typs private oder protected sondern public handelt ist dies auch immer problemlos möglich.

Externe Funktionen  |  Klassen  |  Kapselung

Es nimmt die erste Klasse Breite und Länge auf. Zweite und dritte Klasse arbeiten damit weiter; doch auf unterschiedliche Weise.

So errechnet sich die Fläche eines Rechtecks aus Breite · Länge, während die des Dreiecks aus 0,5 · Breite · Höhe entsteht. Da ein rechtwinkliges Dreick nur ein halbiertes Rechteck ist, kann man hier einfach die Höhe des Rechtecks für das Dreieck verwenden. Doch beide Rechnungen brauchen obige Variablen!

Die Kinder danken für das Erbe, verwalten das Vermögen aber anders als die Eltern!

Kinder mit oder ohne Merkmale der Eltern.
Eigenschaften der Kinder...  

Ein Blick auf JavaScript ist sehr hilfreich, das Prinzip der Vererbung zu illustrieren. Dort ist Vererbung ein Prototyp und ein Objekt wie eigentlich alles in JavaScript.

Auch in JavaScript gibt es eine leere Form, die dann mit Merkmalen gefüllt wird. In C++ würde man wohl schnell von Klassen, aber mit denselben Aufgaben sprechen.

Im Unterschied zu C++ wird in JavaScript aber immer ein neues Objekt angelegt, was kein gravierender Unterschied ist. Wichtig ist nur, daß das oberste Bezugsobjekt natürlich der Prototyp sein muss, ebenso wie in C++ die Klasse mit ihren Variablen public etc.

Es ist die Methode dieses quasi Aufhängers oder Blancoformulars die Basis der Vererbung.

Geben Sie im Skript Merkmale zum betreffenden Elternteil ein. Ausgebeben wird die Eigenschaft als Kind des gesamten Prototyps.

Damit nicht alles kritiklos oder ungeprüft vererbt wird, braucht man Bedingungen. Diese müssen nicht im Programmkörper stehen, sondern können in der Klasse bereits eine Auswahl etwa auf Zulässigkeit der Eingaben treffen. So werden in die Klasse bereits grundlegende Überprüfungen eingebaut, damit die Klasse oder deren Methode gar nicht erst aufgerufen werden.

Sofern Sie einen Abbruch bereits in der Klasse haben wollen, achten Sie auf das Hauptprogramm, das ohne entsprechende Eingriffe die Klasse sowieso aufruft. Hier bietet es sich an, in der Klasse Variablen mit falschen Eingaben neu zu initialisieren.

Eine Anmerkung am Rande: Die Fehlermeldung des Compilers

[Error] ISO C++ forbids declaration of 'br' with no type [-fpermissive]

kann schon mal auftauchen. Ist aber nicht weiter tragisch. Es ist deutlich, daß es sich hier um den fehlenden Typ in der Deklaration handelt. Also statt

public : br ( double b ) einfach public : double br ( double b ) mit Datentyp deklarieren. Manchen Compilerversionen reicht nämlich ein Datentyp.

Der Compiler  |  Hinweis zum Compiler  

Es geht im Beispiel darum, welche Variablen der Oberklasse verwendet werden und ob überhaupt.
Während das Rechteck beide Doubles unverändert verarbeitet, wird im Dreieck die Rechnung schon verändert. Im Kreis entfällt eine Variable und wird durch Pi ersetzt.
Die letzte Unterklasse ignoriert die Deklarationen der Hauptklasse völlig und verarbeitet nurmehr Konstanten.

 JavaDome: Vererbung

Wie oben bereits erwähnt, soll hier die Methode der Klasse im Falle einer 0 als Divisor selbstständig korrigieren und aus der 0 eine 1 machen. Dazu wird betreffende Variable initialisiert - was zuvor unterblieb - und erst dann die Variable vererbt.

Hier wird die Klasse zwar auch aufgerufen, aber das Ergebnis ist ebenn immer 0, weil in der Klasse ein grober Vorgriff auf das Ergebnis im Programm steht.

Die Pseudovariable return gibt also dem Hauptprogramm das Ergebnis ohne speziellere Bedingungen vor.

Jetzt wird es aber konkreter und die Art der Eingabe soll dezidiert verarbeitet werden. Dazu ist eine Bediungung im Programmkörper sinnvoller. Geben Sie testweise mehrere falsche Zahlen ein. Also negative oder Null.

Bei der Vererbung von strings sollte man beachten, die öffentlich erreichbare Variable - also public - im Datentyp betont leer zu halten mit void

Damit auch Eingaben wie James Bond 007 hier möglich sind, erfolgt die Aufnahme des Strings über getline ( cin, aus ) wegen der Leerzeichen.

1. Quellcode in Strings

Damit der Focus von der Vererbung nicht zu stark abgelenkt wird, soll hier variable.length() anstelle der dezidierteren for Schleife ausreichen.

Wir haben zwei Subklassen im Gepäck, die per Bedingung des Hauptprogramms wechselweise aufgerufen werden können. Die zweite Unterklasse vererbt aber nur eine erste Konstante, der Rest ist nicht Element der Klasse sondern Teil des Hauptprogramms.

Zeichen zählen

Report

Trotz aller Prototypen und Objekte gibt es in JavaScript in der Tat explizit
document.createTextNode ( addi ) und node.appendChild ( txtn )
was den Namen Vererbung schon verdient.
Dennoch bleibt alles am Objekt orientiert, denn die Deklaration der Variablen geht den Umweg über die Erzeugung eines neuen Objekts mit besagtem createTextNode. Der Clou ist natürlich, daß Sie diese Einträge, in Form der Kinder, einzeln löschen können.

Liste in Delphi mit Lazarus

Startseite  |  Hinweise und Impressum  |  Facebook  |  Twitter  |  Google plus