Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2013-01-09 00:33:53 multiples classes

bouclettes
membre
Lieu: 74/93
Date d'inscription: 2011-09-30
Messages: 67

multiples classes



Salut à toutes et tous,

sauriez-vous comment faire, à l'intérieur d'une classe, pour créer un nombre non-défini d'instances d'une autre classe? Par exemple, je souhaite créer une matrice de toggle. Le nombre de toggle n'est pas défini à l'avance, c'est l'utilisateur qui le donne dans le setup de la classe. Quel code dois-je écrire, aussi bien dans le .h que dans le fichier source pour que ma classe matrice crée elle-même le nombre d'instance de toggle nécessaire?

J'imagine que ça ne doit pas être sorcier mais je ne trouve pas d'exemple.
Merci à vous!
Et bonne année à tous les codelabeurs!

bouclettes

Hors ligne

 

#2 2013-01-09 01:24:35 Re : multiples classes

lilive
membre
Lieu: Toulouse
Date d'inscription: 2011-06-24
Messages: 52
Site web

Re: multiples classes



Bonsoir,

Tu peux utiliser la syntaxe

Toggle * t = new Toggle();

L'opérateur new renvoie un pointeur vers l'instance créée.


Pour créer num instances et les mettre dans un vector:

vector<Toggle *> toggles;
for (int i = 0; i < num; i++) {
    toggles.push_back( new Toggle() );
}

Dernière modification par lilive (2013-01-09 01:29:27)

Hors ligne

 

#3 2013-01-09 19:36:18 Re : multiples classes

bouclettes
membre
Lieu: 74/93
Date d'inscription: 2011-09-30
Messages: 67

Re: multiples classes



Salut,

merci pour ta réponse. Ces lignes vont uniquement dans le fichier cpp? Il n'y a rien à déclarer dans le .h?
Et à quel endroit est-ce que je peux placer le setup de la classe?
merci à toi

bouclettes

Hors ligne

 

#4 2013-01-09 22:40:00 Re : multiples classes

lilive
membre
Lieu: Toulouse
Date d'inscription: 2011-06-24
Messages: 52
Site web

Re: multiples classes



bouclettes a écrit:

Et à quel endroit est-ce que je peux placer le setup de la classe?

bouclettes a écrit:

Le nombre de toggle n'est pas défini à l'avance, c'est l'utilisateur qui le donne dans le setup de la classe.

Je ne comprends pas bien ce que tu appelles le setup de la classe.

Avec OF, il y a bien une fonction setup pour la classe principale, qui étend ofBaseApp et qui s'appelle App dans tous les exemples livrés. Mais c'est la seule imposée. Peut-être appelles-tu setup la portion de code de la classe Toggle que tu voudrais qui soit exécutée au moment de l'instanciation? Dans ce cas, ça s'appelle la fonction constructeur de la classe. Mais il s'agit là de ce que voit le programmeur, hors tu parles de l'utilisateur. Du coup j'ai du mal à te suivre.

Tu pourrais expliquer un peu plus ce que tu essaies de réaliser, et donner les bouts de code que tu as si tu en as, qu'on puisse se comprendre wink


bouclettes a écrit:

Salut,
merci pour ta réponse. Ces lignes vont uniquement dans le fichier cpp? Il n'y a rien à déclarer dans le .h?

Tout dépend de ce que tu veux faire. Pour reprendre mon exemple, à supposer qu'il cadre avec ce que tu veux, tu pourrais déclarer le vector dans le .h de façon à y avoir accès dans toutes les fonctions de la classe.

Dernière modification par lilive (2013-01-09 22:40:53)

Hors ligne

 

#5 2013-01-09 23:12:25 Re : multiples classes

bouclettes
membre
Lieu: 74/93
Date d'inscription: 2011-09-30
Messages: 67

Re: multiples classes



effectivement, tu as bien deviné ce que je voulais dire avec mon langage de néophyte. Je parlais du constructeur que j'avais toujours vu nommé setup jusque là, d'où l'abus de langage smile
Alors je vais essayer d'être plus précis. L'idée serait de faire ce qui a visiblement déjà été fait 3 milliards de fois environ, des objets GUI à ma sauce (slider, bouton, toggle, etc...)
J'ai déjà réalisé un toggle qui fonctionne et je souhaiterais utiliser ce code pour créer une classe matrice qui ne serait rien de plus qu'un tableau de toggle. Histoire de me frotter un peu à l'héritage.

Là où je bloque, c'est effectivement au niveau du constructeur. Je voudrais que dans le constructeur de la classe matrice, l'utilisateur puisse entrer le nombre de colonnes et de lignes. Il faudrait donc que cette classe puisse elle-même instancier plusieurs toggles. Et là, à part l'utilisation d'une boucle for qui me semblait assez évidente, je sèche.

Je te joints les 2 fichiers de la classe toggle. Peut-être que ça sera plus clair avec.
Merci encore

bouclettes

Hors ligne

 

#6 2013-01-09 23:13:45 Re : multiples classes

bouclettes
membre
Lieu: 74/93
Date d'inscription: 2011-09-30
Messages: 67

Re: multiples classes



Et le .h

Hors ligne

 

#7 2013-01-12 01:59:54 Re : multiples classes

lilive
membre
Lieu: Toulouse
Date d'inscription: 2011-06-24
Messages: 52
Site web

Re: multiples classes



Voici une façon de s'y prendre.
J'ai fait aussi des changements dans ton composant toggle car je ne pouvais les compiler avec la version de of que j'ai installée, le système d'évènements a dû changer.
De toute façon je doute que ce soit une bonne idée que chaque composant écoute l'évènement ofEvents().draw

Hors ligne

 

#8 2013-01-12 10:59:10 Re : multiples classes

bouclettes
membre
Lieu: 74/93
Date d'inscription: 2011-09-30
Messages: 67

Re: multiples classes



Salut lilive,

super, c'est bien ça que je cherchais! Je vais décortiquer ça.
Merci beaucoup!
Bonne journée à toi

bouclettes

Hors ligne

 

#9 2013-01-28 21:23:58 Re : multiples classes

bouclettes
membre
Lieu: 74/93
Date d'inscription: 2011-09-30
Messages: 67

Re: multiples classes



salut,

j'ai un peu décortiqué ton exemple. Et ça a déjà clarifié l'histoire du constructeur.
Mais quelques trucs restent obscurs pour moi. Pas simple le c++ smile
Dans le .h, tu me dis si je me trompe, tu crées un tableau dynamique avec comme type non pas une valeur ou un caractère mais un objet, en l'occurence, l'objet crToggle, c'est bien ça?
A quoi sert le *? Y a-t-il un rapport avec les pointeurs?
L'autre ligne qui m'intrigue, c'est la 3e ligne de code du .cpp: crToggle * toggle;
Quelle est l'action de cette ligne?

Et puis une dernière sur la commande new. J'avais lu que cette façon de créer des objets nécessitait l'utilisation à la fin de la commande delete pour détruire les objets créés. Si cela n'était pas fait, il risquait d'y avoir des fuites de mémoires. Est-ce le cas ici? Ou pas de soucis à se faire?

Hors ligne

 

#10 2013-01-28 23:11:47 Re : multiples classes

lilive
membre
Lieu: Toulouse
Date d'inscription: 2011-06-24
Messages: 52
Site web

Re: multiples classes



Salut,

Toutes tes questions sont liées.

bouclettes a écrit:

L'autre ligne qui m'intrigue, c'est la 3e ligne de code du .cpp: crToggle * toggle;
Quelle est l'action de cette ligne?

Cela définit une variable qui est un pointeur vers un objet crToggle.
Pour créer des objets pendant l'exécution, on peut utiliser new.
Et new renvoie un pointeur vers l'objet créé, c'est pour cela que ma variable doit être un pointeur.
Si je faisais

crToggle toggle;
toggle = new crToogle();

ça n'irait pas, car j’essaierais d'affecter à une variable de type crToggle non pas un objet crToggle mais un pointeur vers un objet crToogle.

bouclettes a écrit:

Dans le .h, tu me dis si je me trompe, tu crées un tableau dynamique avec comme type non pas une valeur ou un caractère mais un objet, en l'occurence, l'objet crToggle, c'est bien ça?
A quoi sert le *? Y a-t-il un rapport avec les pointeurs?

C'est ça.
vector<crToggle> c'est un tableau de crToggle
vector<crToggle *> c'est un tableau de pointeurs vers des objets crToggle
J'y stocke les pointeurs vers les crToggle créés par des new.

bouclettes a écrit:

Et puis une dernière sur la commande new. J'avais lu que cette façon de créer des objets nécessitait l'utilisation à la fin de la commande delete pour détruire les objets créés. Si cela n'était pas fait, il risquait d'y avoir des fuites de mémoires. Est-ce le cas ici? Ou pas de soucis à se faire?

Quand on fait comme moi, il faut effectivement se préoccuper de détruire les objets créés le cas échéant avec delete. On peut faire cela dans le destructeur d'une classe. Par exemple si tu as le code:

brBoard * board;
board = new crBoard();
delete board;

Alors l'objet crBoard sera détruit et la mémoire libérée. (j'appelle crBoard le panneau contenant plusieurs crToggle, je ne me souviens plus si c'est son nom, je n'ai pas le code sous les yeux)
Mais si l'objet crBoard a créé des crToggle avec des new, il faut veiller à les détruire un par un dans le destructeur de la classe crBoard. Sinon tous les objets crToogle seront toujours en mémoire, et comme on aura perdu le tableau qui contenait les pointeurs vers eux, on aura plus moyen d'y accéder. Ni pour les manipuler, ni pour les détruire.

Tu vois que tu vas avoir besoin de te former un peu au C++, il y a des tutos sur la toile.
Je débute moi aussi, j'espère ne pas avoir dit de bêtises ! Si ça se trouve OF propose des simplifications que je n'ai pas encore découvertes. Je devrais aller regarder de plus près les exemples fournis...
Ou alors, si tu trouves ça trop de boulot, tu peux regarder du côté de processing. C'est en java et je pense plus accessible, c'est pas pour rien que j'ai l'impression que plus de monde l'utilise, il n'y a qu'à voir la différence de fréquentation des salles OF et processing sur ce forum. C'est peut-être moins rapide à l'exécution, mais ça doit simplifier pas mal de choses. Par exemple en java il y a un mécanisme de garbage collector, qui s'occupe de faire le ménage de la mémoire automatiquement quand les objets sont détruits, on évite les delete.

Bon courage smile

Dernière modification par lilive (2013-01-28 23:12:32)

Hors ligne

 

#11 2013-01-29 01:38:41 Re : multiples classes

bouclettes
membre
Lieu: 74/93
Date d'inscription: 2011-09-30
Messages: 67

Re: multiples classes



Merci je vais en avoir besoin! big_smile
J'ai commencé à lire le bouquin tiré du tutoriel du siteduzéro qui est pas mal du tout. Malheureusement rien sur les arts numériques. C'est plutôt orienté jeu vidéo. Mais c'est un bon début.
J'avais effectivement commencé avec processing, qui me semblait déjà pas facile. Mais c'était avant de me frotter au c++!!!
Ceci dit, mon projet est de créer un logiciel de régie son de théâtre, du coup la rapidité du c++ est un argument important. Peut-être faux d'ailleurs.

Bon du coup avec toutes ces réponses, j'en ai pour un bout de temps.
Merci
à++ alors

bouclettes

ps: très chouette l'install Cartons! Bluffant même!

Hors ligne

 

#12 2013-01-29 09:27:55 Re : multiples classes

lilive
membre
Lieu: Toulouse
Date d'inscription: 2011-06-24
Messages: 52
Site web

Re: multiples classes



Merci pour ton appréciation de Cartons, n'hésite pas à en parler autour de toi, je le diffuse actuellement wink

Ce n'est pas ta question de base, mais si tu veux on peut parler un peu de ton choix d'utiliser OF.
Je ne suis pas sûr que tu aies besoin de la puissance de C++. T'es-tu renseigné? Tout dépend de ton projet. S'il s'agit d'une playlist avec quelques effets de crossfade entre les pistes, je pense que d'autre outils pourraient convenir tout aussi bien.
Je pense à processing, à puredata, et même à flash (pour ce dernier, on trouve les outils gratuits pour développer une application de bureau AIR multi-plateforme). Je cite flash parce-que je connais bien, et que ça a commencé par un langage de script très simple (l'actionscript) proche de javascript, qui a bien évolué avec le temps.
Le choix peut aussi dépendre de l'expérience de la programmation que tu as.
Si tu n'as pas besoin de C++, et que tu as peu d'expérience en programmation, je réfléchirais à 2 fois avant de faire ce choix.

Et autre question que je me pose: n'existe-t-il pas déjà un logiciel qui fait ce que tu veux?
J'ai bossé récemment avec un régisseur qui utilisait D::Light pour sa régie lumière. Ça avait l'air de faire l'affaire. Ce qui était bien, c'est qu'on a pu faire communiquer D::Light avec un patch (programme) puredata via OSC assez facilement. On a ainsi pu lancer des sons en les synchronisant avec les effets lumière, ou l'inverse. J'ai personnellement créé un patch qui à l'appui d'une touche permettait de basculer entre 2 pistes sons avec un fondu.

Les titres des différentes salles de ce forum peuvent te donner un bon aperçu des solutions existantes. Peut-être recueillir des avis avant de te lancer, dans la salle "hello world", en décrivant bien ton projet ?
Ah mais zut ! En écrivant ceci j'ai eu l'idée de chercher tes précédents messages et je vois que tu as déjà fait cela. J'aurais dû commencer par ça grrrrr smile
Bon je dois filer. Si d'autres idées me viennent je t'en fais part, mais je crois que tu as déjà bien réfléchi...

Dernière modification par lilive (2013-01-29 09:28:47)

Hors ligne

 

#13 2013-01-29 11:38:42 Re : multiples classes

bouclettes
membre
Lieu: 74/93
Date d'inscription: 2011-09-30
Messages: 67

Re: multiples classes



Effectivement, je ne suis pas venu à OF directement. J'ai pas mal utilisé Pure Data, j'ai même commencé ce projet sous pd mais l'interface graphique trop lente et l'impossibilité de compiler un patch m'ont convaincu de passer à un autre langage. J'ai essayé Processing et SuperCollider, peut-être pas assez, et finalement je pense aujourd'hui que OF est vraiment la bonne solution même si ça risque d'être long. Je ne suis pas pressé et ça m'intéresse. D'autant que j'avais déjà une petite expérience en C qui m'a permis de démarrer assez vite.
Mais c'est sûr que parfois le doute s'installe au vu de la difficulté.
L'idée serait de faire un logiciel vraiment autonome pour les petites compagnies qui n'ont pas les sous pour un Live, ce dernier n'étant pas non plus développé pour ce type d'utilisation. A terme, peut-être même créer un hardware avec arduino ou raspberryPi. ça serait une solution presque complète, abordable et avec license pas trop contraignante pour les structures culturelles ayant peu de moyens.
Je suis actuellement en train de galérer à trouver un ordi avec Live et carte son pour une compagnie. ça me renforce pas mal dans ce projet!!

Ceci dit, je ne suis pas fermé aux arguments pour un autre langage, je n'en ai sûrement pas fait le tour. Si tu as des idées, je prends!

Hors ligne

 

#14 2013-01-30 01:44:34 Re : multiples classes

caracteriel
membre
Date d'inscription: 2011-07-03
Messages: 130

Re: multiples classes



Yo

  J'utiliserais plutôt :
Toggle *t
t= new toggle[n]
où n est le nombre d'instance de ta classe
plutôt que "vector" pour des questions de flexibilité

Hors ligne

 

#15 2013-01-31 00:35:12 Re : multiples classes

bouclettes
membre
Lieu: 74/93
Date d'inscription: 2011-09-30
Messages: 67

Re: multiples classes



bon, je suis encore loin d'utiliser pointeur et autre vector. Je galère déjà avec cette nouvelle façon d'écrire un constructeur! Merci caracteriel pour ta réponse, mais du coup j'en suis pas là! roll
Du coup, pour essayer de vraiment bien comprendre comment ça marche, j'ai créé une classe simplissime qui génère juste un carré dont le seul paramètre est la couleur.
En utilisant un constructeur qui ressemble à void nomdemaClasse::setup(int couleur), tout se passe bien. Par contre, en essayant un "vrai" constructeur écrit comme ça nomdemaClasse::nomdemaClasse(int couleur), impossible de l'instancier.
Le compileur cherche désèspéremment un constructeur par défaut, sans paramètre. Et moi je cherche désèspéremment à comprendre.
Dans testapp.h, j'écris:  nomdemaClasse nomdemonObjet
Dans testapp.cpp, j'écris:  nomdemaClasse nomdemonObjet (paramètre)
Une bonne âme pour débloquer ce problème, sûrement basique? En pièce jointe, les fichiers de la classe.
Merci

bouclettes

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024