Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 30.06.2009, 09:51 Titel: UDTs |
|
|
Ich habe zwei Probleme, bei denen ich einfach nicht weiterkomme:
a) Ich möchte in einem UDT eine beliebige Anzahl unterschiedlich großer Elemente speichern. Zur Laufzeit sollten sich Objekte hinzufügen bzw. entfernen lassen. Wie lässt sich das am Besten realisieren?
Code: | type meinObjekt
_name as String
_beschreibung as String
...
[mehrere verschiedene Objekte (verschiedene Datentypen)]
end type |
b) Ich möchte in einem UDT eine beliebige Anzahl gleicher Elemente speichern. Zur Laufzeit sollten sich Objekte hinzufügen bzw. entfernen lassen. Wie lässt sich das am Besten realisieren?
Code: | type meinObjekt2
_name as String
_beschreibung as String
...
[mehrere gleiche Objekte (gleiche Datentypen)]
[z.B.:
_objekte() as meinObjekt3
_anzahlObjekte as integer
]
end type
type meinObjekt3
name as String
beschreibung as String
end type |
Die Eigenschaften sollen via Properties angesprochen werden: z.B.:
Code: | dim test as meinObjekt2
dim q as integer
dim test2 as meinObjekt3 ptr
test._name = "Test123"
test2 = new meinObjekt3
test.add_objekt(test2)
for q = 1 to test._anzahlObjekte
print test.objekte(q).name
print test.objekte(q).beschreibung
next
|
Ist so etwas mit FB überhaupt möglich? Wenn ja, wie? Wenn nein, wie muss man es verändern, damit es möglich ist?
LG, St_W _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 30.06.2009, 10:07 Titel: |
|
|
Auf eine entsprechende Antwort wäre ich auch gespannt.. sowas in der Art hab ich auch mal gefragt und hab nur zur antwort bekommen, dass man element für element einzeln wegschreiben muss... Dass es also eine Universallösung dafür nicht gibt.
Ideal wäre sowas wie bload oder bsave für UDTs .. aber leider kann man bload und bsave nur im grafikmodus einsetzen und sie speichern nur zusammenhängende datenbereiche. Bei Strings müsste demnach nur der Pointer gespeichert werden, aber nicht der String-Inhalt.... verzwickte sache, meiner meinung nach...
EDIT: STOOOP.. SORRY Hab die fragen falsch interpretiert! da muss ich nochmal drüber nachdenken  |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 30.06.2009, 10:24 Titel: |
|
|
Zu a) Das lässt sich nur über eine verkettete liste bewerkstelligen die in ihren einzelnen kettengliedern mit einem ANY PTR auf die Objekte zeigt die verwendet werden sollen.
Ansonsten kann man elemente zur laufzeit nicht hinzufügen oder entfernen
Zu b) Kann man über ein Array machen, wenn man die Anzahl der zu erwartenden Objekte kennt und dann per ANY PTR drauf zeigen lassen...
Oder auch über eine verkettete Liste.
Zu c) Die Eigenschaften können nur dann angesprochen werden (über eine Property oder funktion) wenn der Datentyp fix oder zumindest verwandt ist. Soetwas wie vererbung gibts in FB nicht. Aber mit tricks kann man bestimmte "Eigenschaften" trotzdem an andere Objekte weitergeben. Istn bischen dirty .. hier ein kleines beispiel:
Code: |
type tierklasse
beine as integer
arme as integer
end type
type affenklasse
tier as tierklasse 'Hiermit wird der Affe zum Tier
schwanz as integer
end type
type katzenklasse
tier as tierklasse 'Hiermit wird die Katze zum Tier
miauen as integer
end type
dim affe as affenklasse
dim katze as katzenklasse
dim tier as tierklasse ptr
tier = cast(tierklasse ptr, @affe)
tier->beine = 2
tier->arme = 2
tier = cast(tierklasse ptr, @katze)
tier->beine = 4
tier->arme = 0
print "Affe hat " & affe.tier.beine & " Beine und " & affe.tier.arme & " Arme."
print "Katze hat " & katze.tier.beine & " Beine und " & Katze.tier.arme & " Arme."
sleep
|
Das ist natürlich nicht wirklich vererbung, aber man kann sich damit immerhin ein wenig behelfen. |
|
Nach oben |
|
 |
|