variable décrivant une classe, est-ce possible ? [c++] - C++ - Programmation
Marsh Posté le 07-04-2003 à 18:00:59
rappel:
new objet
crée un objet et renvoie sont adresse
new (adresse) objet
crée un objet placé à partir de adresse
ne jamais utilisé de paranthèses avec new à moins de savoir ce qu'on fait
Marsh Posté le 07-04-2003 à 18:53:14
j'ai pensé aux templates ...
Etant donné que c'est pour un langage de scripts, ca pose quelques problèmes car le type de la classe n'est pas connu à la compilation ... => pas de templates ...
Marsh Posté le 07-04-2003 à 18:54:30
++Taz a écrit : rappel: |
tu peux préciser, j'ai pas tout compris ... Mais en tous cas, ca m'intéresse
Marsh Posté le 07-04-2003 à 19:09:09
Déjà, une chose, c'est que ça change pas mal d'un langage à l'autre...
Par exemple, pour répondre à ++Taz, en C#, il faut toujours utiliser les () lors d'un new si c'est un objet (et non un type). En fait, on fait un "new constructeur" et non pas un "new type".
Par exemple, déclaration d'une class en C#, contenant une propriété et une méthode :
Code :
|
Donc à partir de là, on voit tout de suite que ça peut énormément changer d'un langage à l'autre.
Sinon, j'ai pas bien compris. Qu'est-ce que tu veux faire exactement ? Une variable, qui lorsqu'on fait un new dessus crée un objet utilisant la class C ?
-- Edit : Désolé, je retourne me coucher, y'avais marqué "C++". J'ai rien dit --
-- Edit 2 : Quoique non... A ma connaissance, y'a pas de langage de script basé sur le C++, donc c'est pas du C++ --
Marsh Posté le 07-04-2003 à 19:28:30
ce code est correct et sans fuite de mémoire
Code :
|
Marsh Posté le 07-04-2003 à 19:40:32
Ca fait quoi au juste ? Ca crée une variable "q" qui pointe sur "p" c'est ça ?
Marsh Posté le 07-04-2003 à 19:44:19
ben ça fait un new, sauf que c'est toi qui spécifie ou va etre placer l'objet, en assumant que l'adresse donnée est correcte et est le debut d'une zone mémoire suffisante pour l'objet. ça sert à réutiliser, c'sst utile notemment quand on ecrit des allocateur
Marsh Posté le 07-04-2003 à 19:49:13
OK...
Mais tu as bien déclaré "q" utilisant la même adresse que "p" non ?
p reste valide ou il est détruit ?
Si oui, si je comprend bien :
Après ton truc (et avant le delete évidement), si tu fais :
p = 2;
q++;
cout << p << "\n";
=> Ca affiche "3", c'est bien ça ?
Marsh Posté le 07-04-2003 à 20:09:13
tous les pointeurs restent valides et aucun destructeur n'est appelé. le ocmportement est bien celui que tu attends
on utilise ça pour faire un allocateur, on demadne soit meme de la mémoire au système et on fait new (mon_adresse). ça permet de dissocier allocation et construction. voirla STL pour des fonctions de plus haut niveaux (new étant un opérateur).
pour finir le petit topo, new reçoit enf ait 2 arguments: le placement et la taille de l'objet à créer
Marsh Posté le 07-04-2003 à 20:19:57
theShOcKwAvE a écrit : Est-il possible d'avoir une variable qui décrit une classe afin de faire un new dessus ? |
C'est le pattern Factory que tu cherche.
Une factory est un objet qui t'en renvoie un nouveau lorsque tu lui envie la méthode qui va bien.
genre factory.createObject().
Tu peux aussi aller voir Abstract Factory pour une utilisation un peu plu fine.
Marsh Posté le 08-04-2003 à 10:50:47
nraynaud a écrit : |
Merci nraynaud !
j'vais jeter un coup d'oeil du côté de ces 2 "Factory"
Marsh Posté le 08-04-2003 à 10:55:05
theShOcKwAvE a écrit : |
comme quoi, on est quand même mieux devant nos claviers qu'à l'usine
Marsh Posté le 08-04-2003 à 11:18:51
noldor a écrit : comme quoi, on est quand même mieux devant nos claviers qu'à l'usine |
Par contre, d'après ce que je viens de lire, je ne suis pas sur que ca colle tout à fait à ce que je recherche ...
Pour un Look and feel, pas de pb : tu instancies une concreteFactory qui correspond au LnF que tu veux ... Ca te fait un switch acceptable pour déterminer quelle concreteFactory instancier.
Par contre, dans mon cas, il s'agit d'un script. Donc à chaque classe instanciée par le script, je serais obligé de recréer une factory ... Ca ne m'avance pas beaucoup plus que de créer directement la classe en question ...
merci quand même pour les Factory ... Je ne connaissais pas du tout, et ca peut être très utile !
Marsh Posté le 08-04-2003 à 15:53:21
theShOcKwAvE a écrit : |
J'ai pas tout capte.
Mais si tu veux, une factory peut creer plusieurs types d'objets : factory.createObjetType1() factory.createObjectType2() ....
Marsh Posté le 08-04-2003 à 15:57:03
ReplyMarsh Posté le 08-04-2003 à 16:21:29
Reply
Marsh Posté le 07-04-2003 à 17:58:11
Est-il possible d'avoir une variable qui décrit une classe afin de faire un new dessus ?
Exemple :
Il ne me semble pas que ce soit possible, mais on vient de me demander avec tellement d'insistance que je commence à avoir un doute ...
donc si vous avez une explication rationnelle style "le new est interprété à la compilation et le traitement effectué dépend de la classe", alors là, je suis comblé !
merci d'avance