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:

Funktoren

 
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: 08.10.2009, 09:39    Titel: Funktoren Antworten mit Zitat

Gibts funktoren auch in FB?

ein:

(pseudocode)
Code:

type test
    a as string
    declare operator(Vorname as string) as integer
end type

operator test(Vorname as string) as integer
    if a = "" then
        a = Vorname
        print "Hallo " & Vorname
        return 1
    else
        print "Hallo " & Vorname & ", formally known as " & a
        return 2
    end if
end operator

dim t1 as test

t1("Mandy")

if t1("Julia") = 1 then
    Print "Toll das es dich gibt!"
else
    Print "Dich gabs schon mal!"
end if


funktioniert leider nicht.. Er kennt anscheinend den oprator() nicht. Oder wird das vielleicht anders implementiert?

Bitte nicht verwechseln! Ich rede nicht vom CAST() operator .. der CAST-Operator hat einige unzulänglichkeiten die ein funktor nicht hat. (z.B. kann man den CAST-Operator nicht mit parametern überladen oder als eigenständige routine aufrufen)

Wär schade wenns das in FB gar nich gäb...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 08.10.2009, 11:22    Titel: Antworten mit Zitat

was du am ehesten suchst ist glaube ich ein konstruktor, den benutzt man so ähhhnlich.. -> referenz
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 08.10.2009, 12:58    Titel: Antworten mit Zitat

@MisterD: Leider nein, einen konstruktor braucht man nur, wenn man was beim initialisieren eines UDTs machen möchte.

Was ich suche ist, wie man einen UDT als funktion deklariert. .. ein Funktor ist ein Objekt das man auch als funktion gebrauchen kann. Der unterschied zu einer gewöhnlichen funktion ist, das ein funktor auch auf die privaten elemente eines UDTs zugreifen kann. In meinem pseudo-code könnte die variable a auch privat sein. Dann könnte man mit einer "normalen" funktion von aussen nicht auf a zugreifen. Aber der funktor von "testen" könnte das...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 08.10.2009, 23:57    Titel: Antworten mit Zitat

Zitat:
Er kennt anscheinend den oprator() nicht. Oder wird das vielleicht anders implementiert?

OPERATOR gibt es in FreeBASIC sehr wohl, dient aber ausschließlich zur Überladung eines Operators. Also sicher nicht das, was du suchst.

Zitat:
ein Funktor ist ein Objekt das man auch als funktion gebrauchen kann

Ich bezweifle, dass das in FreeBASIC möglich ist. Genaues kann ich aber nicht sagen.
_________________
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
chutullu



Anmeldungsdatum: 18.10.2005
Beiträge: 77

BeitragVerfasst am: 16.11.2009, 15:27    Titel: Antworten mit Zitat

Hallo,

ganz so einfach geht das nicht mit den Operatoren, man kann maximal die bereits stehenden Operatoren überladen, in deinem Fall wäre eine
Lösung so in der Art :

Code:

Type testType
  Vname As String
  erg   As Byte
  Declare Operator Let (lhs As String)
End Type

Operator testType.Let (lhs As String) 
    This.erg = 2

    If Len(lhs) > 0 Then
        This.Vname = lhs
        This.erg = 1
    EndIf 
End Operator

Dim r As testType

r="paul"
Print r.erg,r.Vname
Sleep


Ich weiß nicht wirklich das was du suchst aber vielleicht gibt es ja eine
Anregung was so möglich ist ...

cu chu. [/b][/code]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 16.11.2009, 20:10    Titel: Antworten mit Zitat

Natürlich kann man mit FreeBasic in einem UDT eine Funktion deklarieren. Hast Du das schon mal versucht?
Code:

Type UDT
     Declare Function foo( u as Integer, i as String) as Integer
End Type

Funktion UDT.foo ( u as Integer, i as String) as Integer

    blablablubb

EndFunction

_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
chutullu



Anmeldungsdatum: 18.10.2005
Beiträge: 77

BeitragVerfasst am: 16.11.2009, 21:58    Titel: Antworten mit Zitat

@Elektronix,

er wollte aber keine Funktion, sondern einen Operator, welcher gleichzeitig eine Funktion ist.

So in der Art (Pseudocode)

Code:
type udt
  someString as string

  declare operator = (rhs as string) as byte
end type

operator udt.= (rhs as string) as byte
  if len(rhs) = 0 then
    udt.someString = "nichts"
    return 1
  else
    udt.someString = rhs
    return 2
  end if     
end operator

dim test as udt

print (test = "vorname")


Das Programm sollte jetzt eine Ausgabe von 2 machen, verstehst du auf was die Sache hinaus soll ?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 17.11.2009, 18:29    Titel: Antworten mit Zitat

Property?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 18.11.2009, 00:37    Titel: Antworten mit Zitat

Danke das ihr den fred hier weiterführt.. aber irgendwie fühl ich mich nich ganz verstanden wenn ich von funktoren spreche..

Man stelle sich folgendes vor (ebenfalls pseudocode):

Code:


type mensch
  name as string
  alter as integer
  sprache as string
  declare operator()
end type

operator mensch()
  print "Hallo, mein Name ist " & Name & " und ich bin " & alter & " Jahre alt."
  print "Ich spreche " & sprache & "."
end operator

dim chris as mensch
chris.name = "Chris"
chris.alter = 22
chris.sprache = "deutsch"

chris()


In diesem beispiel wäre der datentyp der vom operator mensch() zurückgegeben wird VOID, aber das gibts in basic ja nich...
Würde dieser Pseudo-code funktionieren, würde das programm in etwa folgendes ausgeben:

Hallo mein Name ist Chris und ich bin 22 Jahre alt.
Ich spreche deutsch.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 18.11.2009, 16:00    Titel: Antworten mit Zitat

Ach sowas. Hm überlade doch einfach den LET-Operator und schreib Chris=0 oder so^^
[/code]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 18.11.2009, 19:12    Titel: Antworten mit Zitat

@28398: Es geht ja nich ums ergebnis, sondern um die methode. Ein "Objekt" das gleichzeitig als funktion ansprechbar ist, hat sicherlich einige vorteile. So könnte man z.B. ein Objekt als plugin realisieren. Im moment geht das NUR mit statischen routinen. Aber eine statische routine hat den nachteil (selbst wenn sie im UDT definiert ist), dass sie nicht auf Elemente eines UDTs zugreifen kann.
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