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:

Feststellen wie ein "Object" erstellt wurde

 
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
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 14.09.2010, 15:17    Titel: Feststellen wie ein "Object" erstellt wurde Antworten mit Zitat

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



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 14.09.2010, 17:10    Titel: Antworten mit Zitat

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

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

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 traurig
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 14.09.2010, 19:40    Titel: Antworten mit Zitat

New ist ganz sicher kein Operator, sondern ein Konstrukt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Stueber



Anmeldungsdatum: 07.07.2008
Beiträge: 202

BeitragVerfasst am: 14.09.2010, 20:13    Titel: Antworten mit Zitat

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



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 15.09.2010, 17:59    Titel: Antworten mit Zitat

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



Anmeldungsdatum: 07.07.2008
Beiträge: 202

BeitragVerfasst am: 15.09.2010, 18:20    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 15.09.2010, 19:46    Titel: Antworten mit Zitat

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



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 15.09.2010, 21:52    Titel: Antworten mit Zitat

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
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