Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 28.10.2007, 16:30 Titel: Parameterübergabe von UDTs |
|
|
Hallo, da bin ich wieder. Diesmal habe ich mehrere Fragen:
1)
Ich habe einen Userdefined Data Type:
Code: |
Type UDT
Element1 as Integer
Element2 as Integer
Element3 as Integer
|
Element 3 ergibt sich aber aus der Verrechnung der ersten beiden Elemente, ist also der Rückgabewert einer Function. Wie kann ich in einer Function, die Element eines UDT ist, auf andere Elemente dieses UDT zugreifen? Gibt es mehrere Möglichkeiten?
2) Ich übergebe einer Sub den Pointer auf besagten UDT. Innerhalb dieser Sub wird eine weitere Sub aufgerufen, die aber nur einzelne Elemente des UDT verrechnen muß, die anderen Elemente sollen "draußen" bleiben.
Übergebe ich dann dieser zweiten Sub die Elemente als dereferenzierte Zeiger, etwa so?
Code: |
Sub zweite sub (UDTptr->Element1 as Integer ptr)
...
End sub
|
oder als normale Variable?
3) In C++ gibt es den "this"-Zeiger, der auf die Funktion zeigt, von der er zurückgegeben wurde. Gibt es so etwas auch in FreeBasic?
Danke für die Hilfe. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4699 Wohnort: ~/
|
Verfasst am: 28.10.2007, 18:36 Titel: |
|
|
Beim CONSTRUCTOR/DESTRUCTOR gibt es ein THIS, ich weiß aber nicht, wie sich das für SUBs anwenden lässt.
Code: | TYPE bruch
zaehler AS INTEGER
nenner AS INTEGER
DECLARE CONSTRUCTOR ( z AS INTEGER, n AS INTEGER = 1 )
END TYPE
CONSTRUCTOR bruch ( z AS INTEGER, n AS INTEGER = 1 )
' legt den Bruch z/n an
' Das Schluesselwort this erlaubt es, auf die Elemente der
' angelegten Variable zuzugreifen.
this.zaehler = z
this.nenner = n
END CONSTRUCTOR |
(ein Auszug aus meinem unfertigen UDT-Tutorial) _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 29.10.2007, 17:28 Titel: |
|
|
Die Sache mit Constructor/Destructor/Disruptor... hab ich ohnehin noch nicht so ganz verstanden. Aus C++ kenne ich das in anderen Zusammenhängen (OOP).
Bei FB 0.18_2b gibt es wohl ein this, das aber eine andere Bedeutung hat als in C. Demnach dient es dazu, wenn ein Record eines UDT das Ergebnis einer Function ist, greift this auf die anderen Records desselben UDT zu. Wenn ich das so richtig verstanden habe, ist meine erste Frage schon beantwortet.
Bleiben Frage 2 und 3: Wie übergebe ich in einer Sub Records eines UDT, der per Pointer übergeben wurde, an eine weitere Sub? Und wie setze ich den Rückgabewert auf den Pointer der zurückgebenden Function? |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4699 Wohnort: ~/
|
Verfasst am: 29.10.2007, 17:55 Titel: |
|
|
Tschuldigung, habe Frage 3 nicht richtig gelesen und auf Frage 1 bezogen. So eine Art Rückzeiger ist mir in FreeBASIC nicht bekannt, könnte sich aber u. U. selbst herstellen lassen. Füge doch in dein UDT selbst einen this-Record ein und belege ihn innerhalb der Funktion, die den UDT zurückgibt, per Hand.
CONSTRUCTOR wird aufgerufen, sobald eine Variable des entsprechenden UDTs angelegt wird (kann z. B. schon mal bestimmte Records vorbelegen, Speicher reservieren oder so), und DESTRUCTOR, wenn der UDT wieder zerstört wird (z. B. am Ende des Programms oder des SCOPE-Blocks). Das sinnvollste, was mir bisher zum DESTRUCTOR eingefallen ist, ist die Freigabe von belegtem Speicher, wenn sie nicht automatisch geschieht.
Bei Frage 2 kann ich leider nicht weiterhelfen - ich würde die Parameter als normale Variblen übergeben. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 29.10.2007, 22:30 Titel: |
|
|
Das mit dem This hat sich geklärt. Kompliment an den Verfasser der FBREF_10-19-2007D.CHM !
Wenn mir jetzt noch jemand helfen könnte bei der Übergabe der Record-Pointer...  |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 30.10.2007, 16:57 Titel: |
|
|
(Fall es ernst gemeint sein sollte: Das ist ein Gemeinschaftsprodukt des FBP-Teams und Dusky_Joe (Aja, und nicht zu vergessen des englischsprachigen Referenz-Teams, das ja die Vorlage für die Übersetzung liefert(e).
Die CHM wird täglich automatisch aktualisiert mit den Inhalten aus der Online-Datenbank.) _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 30.10.2007, 18:01 Titel: |
|
|
Es ist ernst gemeint. Zusammen mit meinem Vorwissen aus C(++) ist mir die CHM eine große Hilfe. Natürlich läßt sie hier und da auch noch Fragen offen, sie man sieht (die Sache mit den Record-Pointern, siehe meine Fragen). Nobody ist perfect . Aber die gegebenen Beispiele sind gut verständlich. |
|
Nach oben |
|
 |
|