Les Classes :-) - Delphi/Pascal - Programmation
Marsh Posté le 02-10-2004 à 15:39:37
En Delphi, une variable d'instance de classe est un pointeur.
aTest n'est donc pas l'instance de la classe mais un pointeur vers cette instance.
Ton instance existe tant que tu ne fais pas le Free dessus. Dans ce cas-ci tu détruis l'objet juste après sa création, donc il n'est pas utilisable ailleurs.
Mais tu pourrais par exemple faire :
UnObjet := aTest;
avec UnObjet qui est déclaré en global, ou dans la Form.
Si tu détruits aTest le pointeur qui est dans UnObjet ne sera plus valide par contre (vu qu'ils pointaient tous deux vers la même chose). C'est comme ça qu'on attrappe des "Access violation xxx at address yyy"
Marsh Posté le 02-10-2004 à 16:04:34
Juste un conseil qui un jour te sauvera la vie, utilise FreeAndNil(aTest) plutôt que aTest.free
Marsh Posté le 02-10-2004 à 16:10:34
Ça n'aidera pas dans le cas où plusieurs variables pointent vers un même objet...
Marsh Posté le 02-10-2004 à 17:29:28
Donc, je récapépète et vous me dites si j'ai compris ou si je suis à côté de la plaque
Si je déclare une variable aTest, qui est un pointeur vers une instance de ma classe, en global alors je pourrai accéder à celle-ci partout dans mon programme.
Dans ce cas, une question me taraude...Pourquoi on entends des personnes dire que les variables globales c'est caca ?
Marsh Posté le 02-10-2004 à 17:31:06
Ça compte pas vraiment comme des variables globales ça je pense.
Marsh Posté le 02-10-2004 à 17:34:12
en fait, elles sont nommées à la création du logiciel mais pas vraiment créées c'est ça ?
Elles seront réellement créées quand on fera
aTest := TMaClasse.Create;
c'est bien ça ?
Marsh Posté le 02-10-2004 à 19:32:37
Oui, mais ce que je voulais dire c'est que quand on parle de variables globales qui sont pas bien, on désigne plutôt les variables ordinaires, comme des entiers, chaînes etc.
Il faut bien que les objets "parents" soient définis quelque part (la fenêtre principale, l'objet qui gère les autres objets dans ton soft, etc.)
Marsh Posté le 02-10-2004 à 20:02:37
aaaaahhhh ben voilà, tu me rassures
Tu sais quoi, j'ai utilisé un logiciel qui s'appelle Ant Renamer intensivement ces derniers jours. Qu'est ce que ça m'a fait bizarre (surtout plaisir) quand j'ai vu que c'était toi son papa. Vraiment magnifique ce logiciel, chapeaubonnet bas m'sieur.
Marsh Posté le 02-10-2004 à 20:10:54
En plus les sources Delphi sont disponibles, donc tu peux voir comment j'ai fait avec les classes et objets en global
Marsh Posté le 02-10-2004 à 23:01:23
ah ben crois-moi que je vais le dévorer ton code source. J'adore la programmation, ce qu'on fait en cours c'est pas tip top alors je m'amuse chez moi, vive la prog ! et vive les programmeur comme toi qui nous apprennent des éléments de programmation..ça tue
Marsh Posté le 02-10-2004 à 23:26:52
Au cours on apprend surtout à apprendre
On apprend énormément en programmant par soi-même, et ensuite au boulot (d'après ma maigre expérience)
Marsh Posté le 04-10-2004 à 14:14:16
hahahahahah juste en decu de implentation
uses nom de l'uniter ou ta class il y est
Marsh Posté le 04-10-2004 à 14:16:16
sunboy a écrit : hahahahahah juste en decu de implentation |
Et en français ça donne quoi ?
Marsh Posté le 04-10-2004 à 14:18:11
quoi en française je suis mauvais , je t'indique l'astuce c'est tout
Marsh Posté le 04-10-2004 à 14:21:31
- Ta "phrase" est pas vraiment compréhensible
- Ça n'a pas grand chose à voir avec la question que posait l'auteur, je ne vois pas où est l'"astuce"
Marsh Posté le 04-10-2004 à 14:24:10
j'en déjas fait des classes achaque unite je suis obliger d'implenté la source de la classe comme je pourait l'appeller ou je veux ,
Marsh Posté le 04-10-2004 à 14:56:13
Il parlait pas de rendre la classe connue de toutes les units, mais de pouvoir utiliser l'instance de la classe (l'objet) de n'importe où.
Marsh Posté le 01-10-2004 à 23:42:32
Salut les amis,
Bon, il est temps pour moi d'utiliser les classes pour passer à des choses nouvelles...bonne résolution n'est-ce pas
Première confrontation, premier problème.
Soit une classe TMaClasse. Sans aller trop loin, on va dire qu'elle contient 2 variables Var1 et Var2 de type String.
Bon maintenant grosse question existentielle : Je met un bouton sur ma fiche et à l'événement OnClick, je met cela :
procedure TfrmTest.btTestClick(Sender: TObject);
var
aTest: TMaClasse;
begin
aTest := TMaClasse.Create;
Showmessage('Objet créé');
aTest.Free;
end;
Donc à partir de là, je peux accéder au contenu de mon objet aTest, c'est à dire aTest.Var1 ou aTest.Var2. Ma question est donc, est-ce que je peux y accéder à partir de n'importe quel endroit de mon programme ? A mon avis non, car l'instance se trouve dans la procédure btTestClick.
Dans ce cas, je voudrai savoir comment utiliser les classes dans le cadre d'un programme qui, par exemple, ouvre un fichier, charge des données à partir de celui-ci et qu'ailleur dans le programme on utilise ces données chargées...
Moi jusqu'au jour d'aujourd'hui j'utilise des variables globales dans lesquelles je met tout ce que je veux et que je peux récupérer à tout moment n'importe où dans le programme.
C'est cet aspect que j'arrive pas à comprendre avec les classes...
A moins que la solution se trouve dans la déclaration d'un objet de ma classe dans les variables globales du programme ??
Beaucoup de questions pour lesquelles j'attends une réponse de votre part.
Merci à tous.
Inekman.
Message édité par Inekman le 01-10-2004 à 23:42:54