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:

Membervariablen Zugriff Problem [ gelöst ]

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



Anmeldungsdatum: 08.10.2012
Beiträge: 29

BeitragVerfasst am: 24.04.2013, 13:08    Titel: Membervariablen Zugriff Problem [ gelöst ] Antworten mit Zitat

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

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! lächeln
Ich finde das nämlich so übersichtlicher als ob ich die einzelnen Codeblöcke und ein Return dadrin untereinander schreibe.

LG. Make zwinkern
_________________
Hmn :/ Mal schaun was es bringt...


Zuletzt bearbeitet von Make-Grafik am 24.04.2013, 13:33, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 24.04.2013, 13:21    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Make-Grafik



Anmeldungsdatum: 08.10.2012
Beiträge: 29

BeitragVerfasst am: 24.04.2013, 13:31    Titel: Antworten mit Zitat

Öhmmm *_*

Manchmal hab ich nur Tomaten auf den Augen durchgeknallt
Ich danke dir! lachen

LG Make grinsen verlegen grinsen
_________________
Hmn :/ Mal schaun was es bringt...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 24.04.2013, 18:39    Titel: Antworten mit Zitat

Variant
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Make-Grafik



Anmeldungsdatum: 08.10.2012
Beiträge: 29

BeitragVerfasst am: 24.04.2013, 19:37    Titel: Antworten mit Zitat

Ah super grinsen
Dankeschön happy
_________________
Hmn :/ Mal schaun was es bringt...
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