; Important:pour que la macro fonctionne, il est impératif
; - Que le nom de la structure soit le même que le nom de l'interface suivit du caractère "_"
; - Que la structure possède la variable Vtable (Première position dans la structure important)
; - Que les procédures Constructeur et Destructeur possèdent le même nom que celui de l'interface
; - Que le nom de chargement des données dans la DataSection soit le même que celui de l'interface
; Pour Rappel: *This = Adresse de la variable Vtable
; Il est important que cette variable Vtable soit déclaré en premier
; dans la Structure pour que: *This.Calcul_=*This.Calcul
; SiVtable était déclaré en deuxième position, on aurait:*This.Calcul_=*This.Calcul-8
; Cela nous permet donc de remplacer dans les procédures *This.Calcul par *This.Calcul_
; On choisit ainsi de travailler sur les fonctions ou sur les membres en prenant l'un ou l'autre
; Fonctions de la Classe
Interface Calcul
SetData(a.l,b.l)
Addition()
Multiplication()
EndInterface
; Membre de la classe
Structure Calcul_
Vtable.l ; Important première position
a.l
b.l
EndStructure
; Constructeur de la Classe
; Appelé aprés création des ressources
Procedure Calcul(*This.Calcul_)
Debug "--------------------------"
Debug "Constructor"
*This\a=0
*This\b=0
Debug "--------------------------"
EndProcedure
; Destructeur de la Classe
; Appelé avant libération des ressources
Procedure Calcul_(*This.Calcul_)
Debug "--------------------------"
Debug "Destructor"
Debug "--------------------------"
EndProcedure
IncludeFile "New_Delete.pb"
Procedure.l Setdata(*This.Calcul_,a.l,b.l)
*This\a=a
*This\b=b
EndProcedure
Procedure.l Addition(*This.Calcul_)
ProcedureReturn *This\a + *This\b
EndProcedure
Procedure.l Multiplication(*This.Calcul_)
ProcedureReturn *This\a * *This\b
EndProcedure
New(*Pointeur,Calcul)
*Pointeur\Setdata(5,3)
Debug "Addition= "+Str(*Pointeur\ Addition())
Debug "Multiplication= "+Str(*Pointeur\ Multiplication())
Delete(*Pointeur,Calcul)
DataSection
Calcul:
Data.l @SetData(),@Addition(),@Multiplication()
EndDataSection
; Automatiquement le code génère la structure Calcul +tiret bas qui donne accès aux membres
New(*Pointeur,Calcul)
*pointeur2.calcul_=*pointeur
*pointeur2\a=10
*pointeur2\b=8
Pour l'héritage, on ne peut le faire qu'ave les interfaces, un exemple en rajoutant la soustraction:
OK, merci pour les précisions. J'ai pas mal appris avec ton code et tes macro,
je vais adapter le mien pour le rendre plus 'présentable' et
souple. (cf post "POO façon maison")