Code: Select all
;-----------------------Fichier New_Delete.pb --------------------
Macro Class(Debut)
Interface Debut
EndMacro
Macro Membre(Fin)
EndInterface
Structure Fin#_
Vtable.l
EndMacro
Macro EndClass()
EndStructure
EndMacro
Macro New(Pointer,Class)
Pointer#_.Class#_=AllocateMemory(SizeOf(Class#_))
Pointer#_\Vtable=?Class
Pointer#.Class=@Pointer#_\Vtable
Class(Pointer)
EndMacro
Macro Delete(Pointer,Class)
If Pointer
Pointer#_.Class#_=Pointer
Class#_(Pointer)
FreeMemory(Pointer)
EndIf
EndMacro
Macro Method(Class,Function)
Procedure.l Function#(*This.Class#_
EndMacro
Macro Constructor(Class)
Procedure.l Class#(*This.Class#_)
EndMacro
Macro Destructor(Class)
Procedure.l Class#_(*This.Class#_)
EndMacro
Macro Close()
EndProcedure
EndMacro
;-----------------------------------------------------------------
Test:
Code: Select all
IncludeFile "New_Delete.pb"
Interface Soustraction
Soustraction()
EndInterface
Class(Calcul Extends Soustraction)
SetData(a.l,b.l)
Addition()
Multiplication()
Membre(Calcul)
a.l
b.l
EndClass()
Constructor(Calcul)
Debug "--------------------------"
Debug "Constructor"
*This\a=0
*This\b=0
Debug "--------------------------"
Close()
Destructor(Calcul)
Debug "--------------------------"
Debug "Destructor"
Debug "--------------------------"
Close()
Method(Calcul,Soustraction))
ProcedureReturn *This\a - *This\b
Close()
Method(Calcul,Setdata),a.l,b.l)
*This\a=a
*This\b=b
Close()
Method(Calcul,Addition))
ProcedureReturn *This\a + *This\b
Close()
Method(Calcul,Multiplication))
ProcedureReturn *This\a * *This\b
Close()
New(*Pointeur,Calcul)
;Modification des valeurs en passant par une fonction
;/*Pointeur\Setdata(5,3)
; Modification directe des valeurs
*pointeur2.calcul_=*pointeur
*pointeur2\a=5
*pointeur2\b=3
Debug "Addition= "+Str(*Pointeur\ Addition())
Debug "Multiplication= "+Str(*Pointeur\ Multiplication())
Debug "Multiplication= "+Str(*Pointeur\ Soustraction())
Delete(*Pointeur,Calcul)
DataSection
Calcul:
Data.l @Soustraction(),@SetData(),@Addition(),@Multiplication()
EndDataSection