Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Parameterübergabe von UDTs

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 28.10.2007, 16:30    Titel: Parameterübergabe von UDTs Antworten mit Zitat

Hallo, da bin ich wieder. happy 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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4699
Wohnort: ~/

BeitragVerfasst am: 28.10.2007, 18:36    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 29.10.2007, 17:28    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4699
Wohnort: ~/

BeitragVerfasst am: 29.10.2007, 17:55    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 29.10.2007, 22:30    Titel: Antworten mit Zitat

Das mit dem This hat sich geklärt. Kompliment an den Verfasser der FBREF_10-19-2007D.CHM ! Daumen rauf!

Wenn mir jetzt noch jemand helfen könnte bei der Übergabe der Record-Pointer... peinlich missbilligen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 30.10.2007, 16:57    Titel: Antworten mit Zitat

lachen

(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). lächeln
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
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 30.10.2007, 18:01    Titel: Antworten mit Zitat

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 zwinkern . Aber die gegebenen Beispiele sind gut verständlich.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz