Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 14.09.2010, 15:17 Titel: Feststellen wie ein "Object" erstellt wurde |
|
|
Hallo zusammen!
Kurze frage: Kann man innerhalb einer UDT feststellen wie es selbst erstellt wurde?
Also ob es z.B. mit
Code: |
dim test as testtype
|
oder mit
Code: |
dim test as testtype ptr = new testtype
|
erstellt wurde? |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 14.09.2010, 17:10 Titel: |
|
|
Nö |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 14.09.2010, 17:28 Titel: |
|
|
New ist doch ein operator.. und die kann man doch überladen.. und da ließe sich doch bestimmt was mit machen.. weiss nur nich wie, ich kriegs nich hin  |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 14.09.2010, 19:40 Titel: |
|
|
New ist ganz sicher kein Operator, sondern ein Konstrukt. |
|
Nach oben |
|
 |
Stueber
Anmeldungsdatum: 07.07.2008 Beiträge: 202
|
Verfasst am: 14.09.2010, 20:13 Titel: |
|
|
Zitat: | New ist ganz sicher kein Operator, sondern ein Konstrukt. |
Falsch! New ist sehr wohl ein Operator und kann überladen werden und das nicht nur in FB. Siehe:
http://de.wikibooks.org/wiki/C%2B%2B-Programmierung:_Operatoren#new_.28Objekterstellung.29
Und jetzt zum Thema:
Ja du kannst new überladen, aber was du möchtest ist leider nicht möglich. Du überlädst new nur einmal, der Operator gibt einen any ptr zurück und bekommt die Größe in Byte als Integer übergeben. Du weißt hierbei nie für welchen Datentyp der Aufruf jetzt stattfindet. Was ich mir vorstellen kann ist dass sich in FB mit new angelegt Variablen auf dem Heap befinden anstatt auf dem Stack, wie in C++,vielleicht kann man damit was machen, weiß ich aber nicht. |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 15.09.2010, 17:59 Titel: |
|
|
@Stueber:
Das ist ja schön und gut, aber auf 'ne C++ Referenz dabei zu linken macht keinen Sinn, dass weiß ich selber und FB <-> C++ sind sich so ähnlich nicht. |
|
Nach oben |
|
 |
Stueber
Anmeldungsdatum: 07.07.2008 Beiträge: 202
|
Verfasst am: 15.09.2010, 18:20 Titel: |
|
|
Zitat: | auf 'ne C++ Referenz dabei zu linken macht keinen Sinn, |
Das war nur um einer Antwort wie "In anderen Sprachen, bla bla" entgegen zu wirken.
Zitat: | dass weiß ich selber |
Warum hast du es dann geschrieben wenn du es doch selbst weißt?
Zitat: | und FB <-> C++ sind sich so ähnlich nicht. |
Die Schnittmenge der Features die sich beide Teilen sind sich sogar sehr ähnlich. FB fehlen zwar Templates und Klassen, aber Prozeduren, Überladungen, Operatoren, etc. sind vom Syntax abgesehen praktisch identisch. |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 15.09.2010, 19:46 Titel: |
|
|
Ich muss Stueber recht geben, FB ist C++ ziemlich ähnlich und New und Delete sind Operatoren.
Ein Beispiel:
Code: | Type myObject
x As Integer
Declare Constructor ()
Declare Constructor (start As Integer)
Declare Destructor ()
Declare Operator New(size As UInteger) As Any Ptr
Declare Static Operator New[](size As UInteger) As Any Ptr
Declare Operator Delete(buf As Any Ptr)
Declare Static Operator Delete[](buf As Any Ptr)
End Type
Constructor myObject()
Print "Constructor ohne Startwert"
End Constructor
Constructor myObject(start As Integer)
Print "Constructor mit Startwert"
x = start
End Constructor
Destructor myObject()
Print "Destructor"
End Destructor
Operator myObject.New(size As UInteger) As Any Ptr
Print "New"
Return Callocate(size, SizeOf(myObject))
End Operator
Static Operator myObject.New[](size As UInteger) As Any Ptr
Print "New[]"
Return Callocate(size, SizeOf(myObject))
End Operator
Operator myObject.Delete(buf As Any Ptr)
Print "Delete"
DeAllocate(buf)
End Operator
Static Operator myObject.Delete[](buf As Any Ptr)
Print "Delete[]"
DeAllocate(buf)
End Operator
Print:Print "-----------":Print
Dim As myObject a
Print a.x
Print:Print "-----------":Print
Dim As myObject Ptr b
Print "Warum das nicht geht sollte keinen wundern"
'Print b->x
Print:Print "-----------":Print
Dim As myObject Ptr c = New myObject
Print c->x
Delete c
Print:Print "-----------":Print
Dim As myObject Ptr d = New myObject (5)
Print d->x
Delete d
Print:Print "-----------":Print
Dim As myObject Ptr e = New myObject [5]
For i As Integer = 0 To 4
Print e[i].x
Next
Delete[] e
Print:Print "-----------":Print
Sleep |
Die Operatoren sind immer Static, warum nur die mit [] definierten Operatoren ein Static davor haben...keine Ahnung, so steht es im englischen Wiki und weglassen bzw. hinschreiben bei den anderen zweien macht keinen Unterschied.
Static bedeutet auch, dass du keine nicht-static-member des UDTs ansprechen kannst. |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 15.09.2010, 21:52 Titel: |
|
|
Stueber hat Folgendes geschrieben: | Zitat: | dass weiß ich selber |
Warum hast du es dann geschrieben wenn du es doch selbst weißt? | Wie aus dem Satzkontext hervorgeht, beziehe ich mich dabei auf C++. |
|
Nach oben |
|
 |
|