OOP: "Echte" Klassen in BlitzMax, aber wie?
Übersicht

lordlomexBetreff: OOP: "Echte" Klassen in BlitzMax, aber wie? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
Ich verstehe die Klassen/Types in Blitzmax nicht Also ich habe in den letzen Jahren sehr viel python programmiert und dort funktioniert eine Klasse wie folgt - Man kann eine Klasse anlegen mit "class Xyz (elternklasse):" - man sollte eine constructor-funktion erstellen, die die parameter der klasseninitialisierung bestimmt also "def __ini__(self, asd, asd):" - Man kann ein Objekt der klasse anlegen mit "asd=Xyz(asd,asd)" - und dieses Objekt hat dann alle memberfunktionen und variablen der Klasse also geht denn "asd.neumalen(screen)" oder "if asd.getPoint(12,12) == 3: ..." Diese letze funktionalität habe ich in Blitzmax noch nicht gefunden. In den Beispielen wird offenbar in einem type eine funktion angelegt, die ein weiteres type zurückliefert, ich will aber ein objekt der klasse wo die funktion drinne ist und nicht ein anderes objekt sonst kann ich mir die klasse ja gleich sparen. Kann mir jemand erklären, wie man das "richtig" macht (Oder ein Codebeispiel posten in dem es die klassen richtig verwendet werden)? Vielen Dank im Voraus! Gruß Lomex |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] SuperStrict
Type TTest Global blub:Int Field bla:Int Function Create:TTest(b:Int) Local t:TTest = New ttest t.bla = b return t End Function Method showbla() Print bla End Method End Type Local test:ttest = TTest.create(5) test.showbla() Erstellt mittels Create als konstruktor die neue instanz und gibt sie zurück. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
lordlomex |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
BladeRunner hat Folgendes geschrieben: Code: [AUSKLAPPEN]
SuperStrict
Type TTest [...] Function Create:TTest(b:Int) Local t:TTest = New ttest t.bla = b return t End Function [...] End Type Achso! Die Create-Methode stellt man manuell darauf ein, das sie ein Objekt ihrer Klasse erzeugt, ja? Das ist einleuchtend (auch wenn ich es sinnvoller finde, wie in python die create-funktion selbständig das neue objekt zerückliefert). Vielen Dank für das einfache Beispiel, eine Frage hätte ich aber noch: bei "New ttest" ist ttest klein geschrieben, ist das in diesem Falle egal (weil bei der angabe des datentyps ist es ja groß)? |
||
![]() |
DaysShadow |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, ist egal, da BlitzMax im Gegensatz zu z.B C++ nicht "DasWortDasIchVergessenHabe" (Case-Sensitive?) ist.
BlitzMax ist es egal ob man groß oder klein schreibt, es ist immer das selbe, bei C++ z.B darf man das nicht, da wären Var1 und var1 unterschiedliche Variablen soweit ich weiß. MfG DaysShadow |
||
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bei BlitzMax gibt es leider nur einen parameterlosen Konstruktor:
Code: [AUSKLAPPEN] Type TTest
Field list:TList Method New() list = new TList End Method End Type Dieser macht das, was du erwartet hast. Da er aber wie gesagt keine Parameter enthalten darf, verwendet man meistens eine eigene statische Methode bzw. Funktion (siehe Post von BladeRunner) mit den benötigten Parametern, die das Objekt entsprechend initialisiert. Der Name dieser Funktion ist natürlich frei wählbar, aber Create hat sich so ein bisschen "eingebürgert" und wird in der IDE zudem wie ein Schlüsselwort hervorgehoben. |
||
lordlomex |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Vielen Dank das beantwortet auch meine letzen Fragen.
Gruß Lomex |
||
![]() |
Farbfinsternis |
![]() Antworten mit Zitat ![]() |
---|---|---|
DaysShadow hat Folgendes geschrieben: Ja, ist egal, da BlitzMax im Gegensatz zu z.B C++ nicht "DasWortDasIchVergessenHabe" (Case-Sensitive?) ist.
BlitzMax ist es egal ob man groß oder klein schreibt, es ist immer das selbe, bei C++ z.B darf man das nicht, da wären Var1 und var1 unterschiedliche Variablen soweit ich weiß. MfG DaysShadow Nicht ganz richtig. Wenn man, wie empfohlen, im SuperStrict Mode programmiert meckert BMax schon wenn ich "Variable" anstelle der deklarierten "varIAble" schreibe. |
||
Farbfinsternis.tv |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
ach ja, farbfinsternis? bei mir tut es das nicht.
superstrict achtet nur auf die korrekte initialisierung mit scope und typ, nicht auf Gross-und Kleinschreibung. Code: [AUSKLAPPEN] SuperStrict
Local test:Int = 5 Print test Print Test Print teSt compiliert bei mir ohne murren und knurren. BMax ist nicht case-sensitive (Ausser Modulnamen unter Linux und MacOS) |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Farbfinsternis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Da hast Du absolut recht. Ich nehme alles zurück und behaupte das Gegenteil ![]() Anscheinend hat mir mein Wissen um das case-sensitive bei Module-Scopes was total Blödsiniges eingeredet ![]() |
||
Farbfinsternis.tv |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group