BMax und Super
Übersicht

![]() |
rambo256Betreff: BMax und Super |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
ich wollte gerade in alter java/c++ Manier folgendes tun: Ich habe eine Basis Klasse, sein Konstruktoraufruf hat ein paar Parameter, also überlade den Standard "Konstruktor" aka die Create Funktion. Nun habe ich die abgeleitete Klasse X. In dieser Klasse X, möchte ich nun den Standard "Konstruktor" mit den Parametern aufrufen, die erwartet werden. Also PseudoCode mäßig so etwas: BlitzMax: [AUSKLAPPEN] Type Base Diese Zeile BlitzMax: [AUSKLAPPEN] temp = X(Super.Create(x,y)) macht für mich Sinn, da ja die Create Funktion auch ein Objekt vom Typ X zurückgeben soll. Was ich da versuche ist folgendes in java (nehmen wir dabei an, ich hätte zuvor die Basis Klasse schon geschrieben): BlitzMax: [AUSKLAPPEN]
Ich möchte also das abgeleitete Objekt, mit Hilfe dem von der Basis Klasse zur Verfügung gestellten Konstruktor, "initialisieren". Geht dies Grundsätzlich nicht, da BMax diese Eigenschaft des OOPs nicht beherrscht, oder gibt es einen "Workaround"? Ich hoffe es gibt einen solchen, da dies nämlich eine Menge Code ersparen kann. |
||
Asus F53z
Das Leben ist eine reine Konkatenation... |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
1. Benutze SuperStrict
2. Kann sein das ich dich missverstehe, aber X kannst du nach Base casten, oder auch so auf die Felder x und y zugreifen... drum weiß ich nicht genau, was du erreichen willst. Nachtrag: BlitzMax: [AUSKLAPPEN] SuperStrict |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
rambo256 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Moin, jap du verstehst mich falsch ![]() Ich möchte einfach redundanten Code vermeiden! Und zwar hast du in beiden Create Funktionen halt wieder diese beiden Zeilen drin: BlitzMax: [AUSKLAPPEN] temp.x = x D.h. ich möchte durch den Aufruf des "Konstruktors" der Basis Klasse dies vermeiden, da ja schon dort beschrieben steht, wie diese beiden Variablen zu initialisieren sind. |
||
Asus F53z
Das Leben ist eine reine Konkatenation... |
n-Halbleiter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das, was du dir vorstellst, geht nicht. Aber das macht nichts, es gibt einen einfachen Workaround (der, denke ich, sogar noch anderweitig nützlich ist, da BMax keine Funktionsüberladung unterstützt, nur Funktionsüberschreibung). Die Idee: Nutze einen Konstruktor (z.B. "Create") und eine Methode, mit der du das Objekt Initialisierst (z.B. "Init").
Beispielcode (deiner adaptiert und modifiziert):BlitzMax: [AUSKLAPPEN] SuperStrict Ich hoffe, das hilft dir weiter. Es ist vielleicht etwas sperrig, kann aber schon manchmal helfen, beispielsweise, wenn man Instanzen neu Initialisieren will/muss (weil zum Beispiel viele - u.U. nicht nachverfolgbare - Referenzen auf die Instanz zeigen). EDIT: Kurzer Hinweis: Du musst wegen der Funktionsüberladung (vielmehr wegen nicht verfügbarer Funktionsüberladung) die "Create"-Funktionen bei Veränderungen der Parameter/Rückgabewerte ja auch anders benennen. Dabei hilft ein einheitliches Schema, beispielsweise "CreateBase" und "InitBase" bzw. "CreateXY" bzw. "InitXY". Nur bei dem Type, der später wirklich häufig gebraucht wird, ist die Funktion "Create" (aufgrund von Faulheit) tragbar. Oder am Ende der Vererbungskette bei (kurzen) Ketten. Denkbar wäre eine Vererbungskette von "TnTupel" über "T2Tupel" zu "T2IntVector" oder ähnliches. Dann nur für den Type "T2IntVector" die "Create" Funktion definieren, bzw. dann evtl. auch für "T2FloatVector". ![]() |
||
- Zuletzt bearbeitet von n-Halbleiter am Mo, Jul 26, 2010 3:45, insgesamt einmal bearbeitet
![]() |
rambo256 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Perfekt! Besten Dank für diese Idee ![]() Werde das dann mal gleich nach dem verdienten Schlaf einbauen. |
||
Asus F53z
Das Leben ist eine reine Konkatenation... |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group