Typen über grundtype ansprechen

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

beanage.johannes

Betreff: Typen über grundtype ansprechen

BeitragSo, Dez 20, 2009 18:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, der Title koingt warscheinlich etwas merkürdig... wusste nicht wie ich es sonst nennen soll.
Ich wollte fragen ob es möglich ist das wenn ich z.B. den type Code: [AUSKLAPPEN]
TMutter
habe und einen Type Code: [AUSKLAPPEN]
TTochter extends TMutter
und noch einen TSohn Code: [AUSKLAPPEN]
extends TMutter
.

ich erstelle ein pa tochtern und ein par söhne, tochter und sohn haben die methode Code: [AUSKLAPPEN]
printName()

alee töchter und Söhne siund zusammen in einer liste.
Jetzt gehe ich die liste durch , kann ich dannCode: [AUSKLAPPEN]
for local dings:TMutter = eachin(allesZusammenListe)
oder muss ich die liste mehrmal (für jede klasse einmal durchegehen) ?
kurz: kann ich "abgeleitete" klassen durch ihre grundklasse ansprechen?

Danke

DaysShadow

BeitragSo, Dez 20, 2009 19:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Jein, TMutter muss alles enthalten was TSohn und TTocher auch enthalten, hat z.B. TMutter die Methode nicht drin geht es nicht.

BlitzMax: [AUSKLAPPEN]
Type TMutter

Field bla:Int

End Type

Type TSohn Extends TMutter

Method PrintBla:Int()

Print bla

End Method

End Type


Später wie du es willst PrintBla() aufrufen ginge nicht!

Willst du die Funktion einer Methode nicht festlegen, schreibst du Abstract hinter die Methode und somit würde TMutter auch die Methode kennen und es würde funktionieren.

BlitzMax: [AUSKLAPPEN]
Type TMutter

Field bla:Int

Method PrintBla:Int() Abstract

End Type

Type TSohn Extends TMutter

Method PrintBla:Int()

Print bla

End Method

End Type


So wiederum würde es gehen.

Also kurz und gut: In deinem Fall werden TSohn und TTochter auf das reduziert was sie von TMutter geerbt haben.

MfG DaysShadow
Blessed is the mind too small for doubt
  • Zuletzt bearbeitet von DaysShadow am So, Dez 20, 2009 19:02, insgesamt einmal bearbeitet

beanage.johannes

BeitragSo, Dez 20, 2009 19:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, vielen dank Smile

mpmxyz

BeitragSo, Dez 20, 2009 19:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Das geht.
Das ist eine Vorraussetzungen der Hauptaspekte von OOP.
Polymorphismus wäre sonst überhaupt nicht möglich:
BlitzBasic: [AUSKLAPPEN]
Type Ober
Global List:TList=New TList
Method New()
List.AddLast(Self)
End Method
Method WasBinIch()
Print "Ober"
End Method
End Type

Type Unter1 Extends Ober
Method WasBinIch() '<-Überschreiben
Print "Unter1"
End Method
End Type

Type Unter2 Extends Ober
Method WasBinIch() '<-Überschreiben
Print "Unter2"
End Method
End Type

New Ober
New Unter2
New Unter1
New Unter2

Local ZW:Int
For Local OberRef:Ober=EachIn(Ober.List)
OberRef.WasBinIch() '<-Polymorphismus! Ein gleicher Methodenaufruf kann verschiedene Objektmethoden aufrufen.
Next
End


mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

DaysShadow

BeitragSo, Dez 20, 2009 19:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab ich irgendwas anderes geschrieben?
Die Methode muss der Oberklasse trotzdem mindestens als Abstract bekannt sein, sonst kann man es knicken.

MfG DaysShadow
Blessed is the mind too small for doubt

mpmxyz

BeitragSo, Dez 20, 2009 19:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Entschuldigung, ich wurde beim Schreiben abgelenkt - ich musste jemandem helfen - und habe danach nicht bemerkt, dass es schon eine Lösung gibt... Rolling Eyes
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

Jolinah

BeitragSo, Dez 20, 2009 20:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Oder aber:

Code: [AUSKLAPPEN]
For mutter:TMutter = Eachin liste
    If TTochter(mutter) Then
        Local tochter:TTochter = TTochter(mutter)
        tochter.PrintName()
    ElseIf TSohn(mutter) Then
        Local sohn:TSohn = TSohn(mutter)
        sohn.PrintName()
    EndIf
Next


Wink

beanage.johannes

BeitragSo, Dez 20, 2009 21:26
Antworten mit Zitat
Benutzer-Profile anzeigen
das mit dem überschreibenfunktioniert bei mir leider nicht Sad
  • Zuletzt bearbeitet von beanage.johannes am So, Dez 20, 2009 21:30, insgesamt 2-mal bearbeitet

mpmxyz

BeitragSo, Dez 20, 2009 21:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist mir neu!
Mein Beispiel funktioniert nämlich mit überschreiben... und es funktioniert zumindest bei mir.
Zeige bitte mal Code.
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

beanage.johannes

BeitragSo, Dez 20, 2009 21:31
Antworten mit Zitat
Benutzer-Profile anzeigen
der code ist zu groß um ihn hier zu posten... aber das mit "Abstract" ght auch nicht, sobal ich ein neues "mutter-objekt" erstelle meckert BMax
Zitat:
Unable to create new object of abstract type....

mpmxyz

BeitragSo, Dez 20, 2009 21:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Sobald eine Methode abstrakt ist, ist die ganze Klasse/Type abstrakt.
Und abstrakte Klassen/Types sind "noch nicht fertig".
Daher kann man keine Objekte abstrakter Klassen/Types erstellen.
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

beanage.johannes

BeitragSo, Dez 20, 2009 21:40
Antworten mit Zitat
Benutzer-Profile anzeigen
ok.. danke habe meinen fehler (unten) gefunde... danke euch allen Smile
fehler: ich hatte nicht in jeder unter-klasse die "abtract"methode integriert.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group