Half year ago I Made this bigger class example similar to an old Powerbasic class conversion to oxygen. But I dont understand all. For example the First def CreateAvengersObject.. and its possible to simplify this example?
Thanks, frank
'
' - oxygen basic, 06-03-2024 by frank bruebach
' - how to set a method with string it's running now
' - it's possible to simplify this example?
def CreateAvengersObject ' this object I don't understand ;)
=====================
%1 * %2 ' -----------------> what's the meaning of multiplication here?
@%2=getmemory sizeof %1
%2.create
end def
def DestroyAvengersObject
======================
%1.destroy
freememory @%1
@%1=0
end def
'------------------------ //
function redims(sys a,n,s)
n*=s
sys m=getmemory n
long le at (a-4)
if le>n
le=n
end if
copy m,a,le
frees a
return m
end function
'
class classThor
===============
'
long *a,b,c
'long a,b,c ' works too ;)
bstring s,st,t
method create()
@a=getmemory 100*sizeof long
end method
'
method destroy()
freememory @a
end method
method redimsA(k as long)
@a=redims(@a,k,sizeof long)
end method
method redimsB(k as long)
@b=redims(@b,k,sizeof long)
end method
' new added
method redimsC(st as string)
@t=redims(@t,st,sizeof string)
return s ", " t
end method
method p1_interfaceA() as long
return b
end method
' new added
method p1_interfaceB() as long
return b
end method
' new added
method p1_interfaceC() as string
s="Avengers are my heroes"
return s ", " t
end method
method p1_interfaceA(x as long)
b=x
end method
' new added
method p1_interfaceB(x as long)
b=x
end method
'
' new added as string ------------ //
method p1_interfaceC(st as string)
t=st
s="Avengers are my heroes"
return s ", " t
end method
method redims_interfaceA(k as long)
redimsA k
end method
' new added
method redims_interfaceB(k as long)
redimsB k
end method
' new added
method redims_interfaceC(st as string)
redimsC st
end method
end class
'---------------------------
function Avengers() as long
============================
'
CreateAvengersObject ClassThor obj
'1) ------------------------//
'
obj.redims_interfaceA 100
'
obj.p1_interfaceA=42
'
print obj.p1_interfaceA ' result 42 ok
'2) ------------------------//
obj.redims_interfaceB 200
obj.p1_interfaceB=2024
print obj.p1_interfaceB '2024 result ok
'3) ------------------------//
obj.redims_interfaceC 300
obj.p1_interfaceC ="I like the Avengers movies"
'result: ok :-) 'Avengers are my heroes, I like the Avengers movies
print obj.p1_interfaceC
END FUNCTION
Avengers()
Hi Frank,
It required about 5 hours of work but it now has redim-able bstring array members, constructor and destructor. Generally speaking, I would only use redim-able members where it was absolutely necessary, but the technique is quite easy to deploy in other projects.
indexbase 1
function redims(sys a,n,s) as sys
=================================
n*=s
sys m=getmemory n
long *le : @le=a-4
if le>n
le=n 'clip le
end if
copy m,a,le
freememory a
return m
end function
===============
class classThor
===============
indexbase 1
long *a ' integer array
long *b ' integer array
sys *c ' for bstring array
method constructor()
====================
'default array sizes
@a=getmemory 100*sizeof long
@b=getmemory 100*sizeof long
@c=getmemory 100*sizeof sys
end method
'
method destructor()
===================
int *le : @le=@c-4
le/=sizeof bstring
freestrings(1,le)
freememory @a
freememory @b
freememory @c
end method
method freestrings(int k,le)
============================
if k<=le
int i
bstring *s : @s=@c
for i=k to le
frees s[i] 'clear uncopied strings
next
endif
end method
'REDIMS
'======
method redimsA(k as long)
@a=redims(@a,k,sizeof long)
end method
method redimsB(k as long)
@b=redims(@b,k,sizeof long)
end method
method redimsC(k as long) 'array of bstrings
int *le : @le=@c-4
le/=sizeof bstring
freestrings(k+1,le)
@c=redims(@c,k,sizeof bstring)
end method
'OUTPUTS
'=======
method p1_interfaceA(int n) as long
return a[n]
end method
method p1_interfaceB(int n) as long
return b[n]
end method
method p1_interfaceC(int n) as string
bstring *ls : @ls=@c
return "Avengers are my heroes " ls[n]
end method
'INPUTS (OVERLOADING)
'====================
method p1_interfaceA(int n,x)
a[n]=x
end method
method p1_interfaceB(int n,x)
b[n]=x
end method
'
method p1_interfaceC(int n, string st )
bstring *ls : @ls=@c
ls[n]=st
end method
method redims_interfaceA(k as long)
redimsA k
end method
method redims_interfaceB(k as long)
redimsB k
end method
method redims_interfaceC(k as long)
redimsC k
end method
end class
'TESTING THE CLASS
'
'---------------------------
function Avengers() as long
============================
'
new ClassThor obj
'1) ------------------------//
'
obj.redims_interfaceA(100)
'
obj.p1_interfaceA(5,42)
'
obj.redims_interfaceA(50) 'test content after redim
print obj.p1_interfaceA(5) ' result 42 ok
'2) ------------------------//
obj.redims_interfaceB(200)
obj.p1_interfaceB(7,2024)
print obj.p1_interfaceB(7) '2024 result ok
'3) ------------------------//
obj.redims_interfaceC(300)
obj.p1_interfaceC(9,"I like the Avengers movies")
'result: ok :-) 'Avengers are my heroes, I like the Avengers movies
print obj.p1_interfaceC(9)
del obj
end function
Avengers()
Many thanks Charles :-) Looks good and I must study new the freestrings Method as constructor destructor methods
So you didnt need the def creatAvengersobject at the beginning of my First example..
The First beginning was this oop class example some month ago
''
'' simple set up and skeleton oop with strings and constructor, destructor methods
''
--------------
class AnObject
==============
int a,b,c,d
float x,y,z
bstring s,t
method constructor(string sp="hello",tp="bye")
=============================================
s=sp
t=tp
print "construct!"
end method
method destructor()
===================
'destroy bstrings
del s
del t
print "destruct!"
end method
method act() as string
======================
return s ", " t
end method
end class
'TEST
'new AnObject aa("Hello","Goodbye")
dim AnObject aa("Hello","Goodbye")
aa.t="Au revoir"
print aa.act
del aa
print "ok"