Class question

Started by Frank Brübach, November 14, 2024, 05:36:06 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Frank Brübach

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()

Charles Pegge

#1
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()

Frank Brübach

#2
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"