Type - Vererbung
Übersicht

![]() |
Der EisvogelBetreff: Type - Vererbung |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo
Dass ich diese Frage stellen muss tut mir irgendwie leid, aber ich raffs nicht. Warum funktioniert folgender Code nicht: BlitzMax: [AUSKLAPPEN] SuperStrict Es wird immer mit "v1 doas not exist" in T2 abgebrochen. Mach ich was falsch, oder geht das mit der Vererbung in globalen Variablen nicht? |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hier gibt es wohl einen kleinen BlitzMax-Bug:
BlitzMax: [AUSKLAPPEN] Type T1 mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja, das ist ja dann wieder so als wäre es ohne Vererbung. Schade, dann wird das wieder nen Haufen Scheibarbeit.
Danke dir. |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
Suco-XBetreff: .... |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das ist sicherlich kein Bug. Globale Variablen und Funktionen sind zum Glück nicht vererbbar. Man kann aber über Methoden auf die Variable der Super Klasse zugreifen.
Code: [AUSKLAPPEN] Strict Type T1 Global val:Int = 100 Function Create:T1() Return New T1 End Function Method ChangeVal(val:Int) Self.val = val End Method End Type Type T2 Extends T1 Global val:Int = 200 Function Create:T2() Return New T2 End Function Method ChangeVal(val:Int) Self.val = val Super.ChangeVal(val+1000) End Method End Type Local obj:T2 = New T2 Print T2.val obj.ChangeVal(100) Print T2.val Print T1.val Dank der nicht Vererbung können beide Klassen Funktionen und Globale Variablen mit gleichen Namen enthalten ohne dass sie sich in die Quere kommen. Mfg Suco |
||
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Und wie es Vererbung von Funktionen und globalen Variablen gibt!
Polymorphie gibt es gratis dazu: BlitzMax: [AUSKLAPPEN] SuperStrict mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das ist von mir aus ein Bug ![]() Wenn man doch exakt sagt man will den Type T2 und davon die statische Funktion Foo(), dann dürfte er eigentlich nicht auf T1 zurückgreifen. Denn hier wird ja kein Objekt angesprochen, sondern wirklich der Type. Das gleiche in der Methode Test(), dort müsste er schon beim Kompilieren sagen dass er kein Foo() in T2 findet. Das objT1.Bar() verhält sich meiner Meinung nach aber richtig. Egal was man für ne Variable verwendet, das Objekt ist vom Type T2. Und die statische Funktion Bar() sollte daher auch in T2 gesucht werden. Obwohl ich hier sowieso wieder T2.Bar() geschrieben hätte. Es macht einfach keinen Sinn eine statische Funktion über ein Objekt aufzurufen. Edit: Das gleiche übrigens auch bei Suco-X: Self.val = val hätte eigentlich eher T1.val = val heissen müssen imho. Naja, so sehe ich das jedenfalls. Fakt ist, es scheint bei BMax anders zu sein als bei üblichen Programmiersprachen, muss ich mir merken ![]() |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Selbstredend können auch statische Funktionen vererbt werden, was daran sollte ein Bug sein? Wenn der erbende Typ sie in dieser Form nicht braucht kann er sie ja überschreiben. | ||
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 |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Jolinah
Dann wäre auch Java verbugt: Code: [AUSKLAPPEN] public class Base {
public static void blah() { System.out.println("It works!"); } } Code: [AUSKLAPPEN] public class Sub extends Base{
} Code: [AUSKLAPPEN] public class Test {
public static void main(String[] args) { Sub.blah(); } } Die Möglichkeit, Polymorphie bei statischen Methoden zu nutzen, gibt es in Java nicht. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das mit dem Bug war nur ein Scherz ![]() ![]() Edit: In C# ist es jedoch nicht möglich statische Funktionen über ein Objekt aufzurufen. T2.Foo() geht auch dort, obwohl er schon beim IntelliSense andeutet dass es in Wirklichkeit T1.Foo() ist. Und ich persönlich habe in so einem Fall halt immer direkt T1.Foo() aufgerufen, da es für mich keinen Sinn macht dies über T2 aufzurufen. Daher habe ich das auch nicht wirklich bemerkt ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group