 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Make-Grafik
Anmeldungsdatum: 08.10.2012 Beiträge: 29
|
Verfasst am: 24.04.2013, 13:08 Titel: Membervariablen Zugriff Problem [ gelöst ] |
|
|
Hallo Community!
Ich schreibe mir derzeitig eine UDT welches die Datentypen in FreeBASIC ersetzen soll. Ich bin nämlich seit 5 Jahren Skriptsprachen abhängig und will mich auch nicht umstellen!
Das erstellte Objekt (im folgenden "Variable") kann wie eine Variable verwendet werden. Der Vorteil ist, es können sowohl Strings als auch Integers oder Doubles in die "Variable" geschrieben werden. Meine UDT sucht sich dann den passenden Datentyp und speichert den Wert dementsprechend in die "Variable". Damit die "Variable" wie eine Variable genutzt werden kann, überlade ich sämtliche Operatoren.
Nun sitze ich aber an ein Problem! Ich will nun den + Operator überladen und als Parameter sollen 2 Objekte meiner UDT übergeben werden. Alles kein Problem, allerdings kann ich jetzt nicht auf Membervariablen die PRIVATE deklaiert sind zugreifen... Dabei müsste ich das aber machen um zu überprüfen welcher Datentyp gerade in meinem Objekt genutzt wird. Ich möchte die Membervariablen unter keinen Umständen als PUBLIC deklaieren!
Alles weitere wird hoffentlich aus dem nachfolgenden Code klar. Ich habe die entsprechende Stelle mit einem Kommentar markiert! (Zeile 2 und 55)
Code: | Type AITvar
' Membervariablen:
Private:
Dim intVar As LongInt
Dim douVar As Double
Dim strVar As String
Public:
Declare Constructor( )
Declare Constructor(iVar As LongInt)
Declare Constructor(dVar As Double )
Declare Constructor(sVar As String )
Declare Property vInt() As LongInt
Declare Property vDou() As Double
Declare Property vStr() As String
End Type
Constructor AITvar( ) : : End Constructor
Constructor AITvar(iVar As LongInt) : intVar = iVar : End Constructor
Constructor AITvar(dVar As Double ) : douVar = dVar : End Constructor
Constructor AITvar(sVar As String ) : strVar = sVar : End Constructor
Property AITvar.vInt() As LongInt
If douVar Then Return Cast(LongInt, douVar)
If Val(strVar) Then Return Val(strVar)
Return intVar
End Property
Property AITvar.vDou As Double
If intVar Then Return Cast(Double, intVar)
If Val(strVar) Then Return Val(strVar)
Return douVar
End Property
Property AITvar.vStr As String
If intVar Then Return Str(intVar)
If douVar Then Return Str(douVar)
Return strVar
End Property
Operator +(xUDT As AITvar, iVar As LongInt) As AITvar : Return Type(xUDT.vInt + iVar) : End Operator
Operator +(xUDT As AITvar, dVar As Double ) As AITvar : Return Type(xUDT.vDou + dVar) : End Operator
Operator +(xUDT As AITvar, sVar As String ) As AITvar : Return Type(xUDT.vStr + sVar) : End Operator
Operator +(iVar As LongInt, yUDT As AITvar) As AITvar : Return Type(iVar + yUDT.vInt) : End Operator
Operator +(dVar As Double , yUDT As AITvar) As AITvar : Return Type(dVar + yUDT.vDou) : End Operator
Operator +(sVar As String , yUDT As AITvar) As AITvar : Return Type(sVar + yUDT.vStr) : End Operator
' Zugriff auf die Membervariablen
Operator +(xUDT As AITvar, yUDT As AITvar) As AITvar
If xUDT.intVar Then Return 1
Return 0
End Operator
Operator -(xUDT As AITvar, iVar As LongInt) As AITvar : Return Type(xUDT.vInt - iVar) : End Operator
Operator -(xUDT As AITvar, dVar As Double ) As AITvar : Return Type(xUDT.vDou - dVar) : End Operator
Operator *(xUDT As AITvar, iVar As LongInt) As AITvar : Return Type(xUDT.vInt * iVar) : End Operator
Operator *(xUDT As AITvar, dVar As Double ) As AITvar : Return Type(xUDT.vDou * dVar) : End Operator
Operator &(xUDT As AITvar, sVar As String ) As AITvar : Return Type(xUDT.vStr & sVar) : End Operator
Operator /(xUDT As AITvar, iVar As LongInt) As AITvar : Return Type(xUDT.vInt / iVar) : End Operator
Operator /(xUDT As AITvar, dVar As Double ) As AITvar : Return Type(xUDT.vDou / dVar) : End Operator
Operator \(xUDT As AITvar, iVar As LongInt) As AITvar : Return Type(xUDT.vInt \ iVar) : End Operator
Operator \(xUDT As AITvar, dVar As Double ) As AITvar : Return Type(xUDT.vDou \ dVar) : End Operator
Operator =(xUDT As AITvar, iVar As LongInt) As AITvar : Return Type(iVar) : End Operator
Operator =(xUDT As AITvar, dVar As Double ) As AITvar : Return Type(dVar) : End Operator
Operator =(xUDT As AITvar, sVar As String ) As AITvar : Return Type(sVar) : End Operator |
Bitte nichts zu meinen Programmierstil sagen!
Ich finde das nämlich so übersichtlicher als ob ich die einzelnen Codeblöcke und ein Return dadrin untereinander schreibe.
LG. Make  _________________ Hmn :/ Mal schaun was es bringt...
Zuletzt bearbeitet von Make-Grafik am 24.04.2013, 13:33, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 24.04.2013, 13:21 Titel: |
|
|
Das ist so leider (noch?) nicht möglich... von 'außen' kann man nicht auf die geschützten Bereiche zugreifen...
Was spricht gegen
Code: | ' Zugriff auf die Membervariablen
Operator +(xUDT As AITvar, yUDT As AITvar) As AITvar
If xUDT.vInt Then Return 1
Return 0
End Operator |
_________________
 |
|
Nach oben |
|
 |
Make-Grafik
Anmeldungsdatum: 08.10.2012 Beiträge: 29
|
Verfasst am: 24.04.2013, 13:31 Titel: |
|
|
Öhmmm *_*
Manchmal hab ich nur Tomaten auf den Augen
Ich danke dir!
LG Make  _________________ Hmn :/ Mal schaun was es bringt... |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 24.04.2013, 18:39 Titel: |
|
|
Variant |
|
Nach oben |
|
 |
Make-Grafik
Anmeldungsdatum: 08.10.2012 Beiträge: 29
|
Verfasst am: 24.04.2013, 19:37 Titel: |
|
|
Ah super
Dankeschön  _________________ Hmn :/ Mal schaun was es bringt... |
|
Nach oben |
|
 |
|
|
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.
|
|