Virtuelle Methoden in BlitzMax

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Trust

Betreff: Virtuelle Methoden in BlitzMax

BeitragSo, Nov 25, 2012 18:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

ist es irgendwie möglich virtuelle Methoden in BlitzMax zu erstellen?

Mein Problem:

In meiner Basisklasse exsistiert eine Funktion um ein Objekt zu erstellen.

Diese Funktion möchte ich aus einem Objekt von einer, von der Basisklasse abgeleiteten Klasse aufrufen, was auch kein Problem ist.

Nun habe ich aber eine als "Abstract" deklarierte Methode in der Basisklasse, welche logischerweise erst in der abgeleiteten Klasse ausprogrammiert wurde.

Und da gibt BMax logischerweise eine Fehlermeldung, da die abstrakte Methode statisch adressiert wird und aus einer abgeleiteten Klasse, keine Methode zum erstellen eines Objekts aufgerufen werden kann, welche sich in der Basisklasse befindet, wenn sich in der Basisklasse ein abstrakte Mehtode befindet, die erst bei der abgeleiteten Klasse ausprogrammiert wurde.

Bei Virtual würde diese Methode dynamsch zur Laufzeit adressiert werden, was das Problem beheben würde.
Gibt es da eine Möglichkeit?
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.

ZEVS

BeitragSo, Nov 25, 2012 18:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
In meiner Basisklasse exsistiert eine Funktion um ein Objekt zu erstellen.

Ein Objekt der Basisklasse? Das kann nicht funktionieren, von einer abstrakten Klasse darfst du keine Instanzen erstellen. Ein Objekt der vererbten (nicht mehr abstrakten) Klasse darfst du dagegen erstellen. Du kannst damnach keine Konstruktor-Funktion in der Basisklasse schreiben, sodass sie für alle Unterklassen gilt. Wenn es um eine Konstruktor-Funktion geht, dann kannst du den interessanten Teil in eine Initialisierungsmethode der Basisklasse auslagern und in den vererbten Klassen dann Konstruktor-Funktionen schreiben, die die geerbte Initialisierungsmethode benutzen. Das wäre eine Möglichkeit. Wenn es um andere Funktionen geht, müsstest du konkreter werden.

ZEVS

Trust

BeitragSo, Nov 25, 2012 19:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich möchte kein Objekt der Abstrakten Klasse bzw. Basisklasse direkt erstellen, diese enthält nur eine Funktion um ein Objekt zu erstellen. Diese wird aber, von der Basisklasse abgeleiteten Klasse aufgerufen.

Der Hintergrund ist dieser:

Ich habe eine Basisklasse für alle interagierbaren Objekte, welche sich fast ausschliesslich nur im aussehen unterscheiden, also braucht es für die verschiedenen Objekte nur eine andere Draw() methode.

Also habe ich in dieser Basisklasse alles einprogrammiert was das Verhalten usw. angeht ( im groben Sinne, denn diese Basisklasse ist auch nochmal von anderen abgeleitet ).

Nun habe ich eine Klasse von dieser Basisklasse abgeleitet, wo sich im groben nur andere Draw()-Methoden befinden, da diese Objekte unterschiedlich gezeichnet werden müssen usw. .

Also habe ich in der Basisklasse eine Abstrakte Methode Draw(), die in der abgeleiteten Klasse ausprogrammiert wurde.

Dies funktioniert so aber leider nicht.
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.

ZEVS

BeitragSo, Nov 25, 2012 19:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
diese enthält nur eine Funktion um ein Objekt zu erstellen

Welchen Zweck erfüllt diese Funktion (handelt es sich hierbei überhaupt um eine Function oder Method)? Was für ein Objekt erstellst du? Wenn du ein Objekt der selben Klasse (z.B. als Clone-Methode) erstellen möchtest, musst du über Reflection gehen:
BlitzMax: [AUSKLAPPEN]
Type TAbstractClass

Method Draw() Abstract

Method Clone:TAbstractClass()

'Local copy:TAbstractClass = New TAbstractClass < - New + abstrakte Klasse
Local copy:TAbstractClass = TAbstractClass(TTypeId.ForObject(Self).NewObject())
'Reflection wird zur Laufzeit ausgewertet
Return copy

End Method

End Type


ZEVS

Trust

BeitragSo, Nov 25, 2012 19:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Genau das brauchte ich!

Vielen Dank!
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group