Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Exercices] Venez vous entraîner !

Ce mois: Parseur de fonctions mathématiques

17 juin 2008 à 21:02:17

J'ai une question : doit-on uniquement surcharger l'opérateur virgule ou peut-on aussi surcharger l'opérateur égal ? (car là je bloque Oo, je vois pas comment sans ^^).
  • Partager sur Facebook
  • Partager sur Twitter
17 juin 2008 à 21:09:43

hilnius >> M@teo donne déjà des TP. Il me semble que Nanoc veut réduire l'utilisation de bibliothèques à la SL dans les exercices qu'il propose.

nono212 >> Qui t'en empêche... Est-il indiqué qu'on a pas le droit ? Anyway sans l'opérateur d'affectation tu n'y arriveras pas.
  • Partager sur Facebook
  • Partager sur Twitter
17 juin 2008 à 21:10:34

C'est bien ce que je pensais ^^

Edit : si on surcharge l'opérateur virgule avec comme paramètres que des int (on peut pas faire autrement hein ?), on obtient le message suivant par le compilateur :

error C2803: 'operator ,' doit avoir au moins un paramètre de type classe


Et je vois pas comment on pourrait mettre un type classe en paramètre...(y'a pas de classe dans "1,2" que je sache...)

Mais c'est vrai que même en "forçant" le compilateur, on ne pourrait mettre que deux ints dans le tableau...


Donc là je sèche complètement ! (le seul moyen serait de mettre une classe en premier paramètre de "operator,", mais à la fin on aurait une affectation du genre : "tab = tab,1,2,3", ce qui ne serait pas cohérent, mais qui marcherais !)

Edit2 : Ah c'est bon, j'ai trouvé la solution à mon problème !
La voilà :

En fait, si on a une affectation du type "tab = 1,2,3,4,5", il faut la comprendre comme (((((tab=1),2),3),4),5)
Ce qui change tout, puisqu'on peut imbriquer des virgules, et on a une classe en paramètre !
  • Partager sur Facebook
  • Partager sur Twitter
17 juin 2008 à 23:00:28

Citation : nono212

J'ai une question : doit-on uniquement surcharger l'opérateur virgule ou peut-on aussi surcharger l'opérateur égal ? (car là je bloque Oo, je vois pas comment sans ^^).


Grâce à l'héritage proposé par Nanoc, cela se fait proprement.
Sans héritage (chose pas propre du tout sur des types comme ceux de la STL), il faut détourner un autre opérateur comme ils ont fait sur boost::assign ->
std::vector <int> v;
v += 1, 2, 45;

(Et en allant à l'essentiel (conteneurs qui supportent push_back), j'avais complètement oublié à quel point cela tenait en si peu de lignes.)

PS: les mots clés c'est
"classe proxy" (intermédiaire en français), et "chainage". Quoique qu'avec l'héritage vous devez pouvoir fusionner la classe proxy dans la classe héritée à remplir.
  • Partager sur Facebook
  • Partager sur Twitter
C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
18 juin 2008 à 9:32:20

@hilnius: Pour le moment je ne pense pas proposer d'exercices du Qt pour les raisons suivantes :

1) Je ne connais pas assez.
2) J'ai pas envie de forcer les gens à utiliser cette bibliothèque même si elle est très bien. Certains préfèrent WxWidget par exemple. La STL est disponible pour tous et est un outil indispensable.
3) Les exercices Qt donnent des très longs codes si l'on veut faire quelquechose qui tient la route.
4) Je pense qu'il est facile de trouver des exercices dans ce domaine. Tu peux essayer de refaire tous les petits programmes que tu trouves (calculatrice, chronomètre, astuce du jour,...)
5) Tu peux toujours essayer de faire une interface Qt par-dessus les exercices proposés. Pour la compression RLE, par exemple, tu pourrais faire un système de fenêtres avec des options pour choisir le flag, le fichier à compresser, etc. dans une fenêtre Qt.

Donc pour le moment, il n'y aura pas d'exercices Qt, mais c'est pas exclu qu'il y en ait un jour.


@non0212: Oui, oui tu peux. J'ai dit que tu pouvais ajouter tout ce que tu voulais.
  • Partager sur Facebook
  • Partager sur Twitter
Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
18 juin 2008 à 10:51:31

ok nanoc
je suis d'accord avec toi il faut de tres long codes pour utiliser un bon programme QT (généralement ca me prend plus de 500 ligne :o )
La STL je vais chercher un peu voir si je trouve quelque chose car je ne connais pas encore.
  • Partager sur Facebook
  • Partager sur Twitter
18 juin 2008 à 10:56:49

Tu connais les string, les cout, le fichiers et les vector. C'est largement suffisant pour ces exercices.
  • Partager sur Facebook
  • Partager sur Twitter
Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
18 juin 2008 à 11:03:37

vector je connais pas
je connais string, cout, et les fichiers mais pas vector (donc comme il est souvent utilisé dans tes codes jai un peu de mal a comprendre)

d'ailleurs : ou peut on trouver un tutoriel SQL (aussi bien expliqué que selui de m@teo si ca existe) ?
  • Partager sur Facebook
  • Partager sur Twitter
18 juin 2008 à 11:04:11

Il y a un lien dans ma signature.
  • Partager sur Facebook
  • Partager sur Twitter
Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
Anonyme
18 juin 2008 à 11:23:33

Citation : hilnius

d'ailleurs : ou peut on trouver un tutoriel SQL (aussi bien expliqué que selui de m@teo si ca existe) ?

Regarde mysql++ (bibliothèque) et Google.

Citation : Nanoc

Il y a un lien dans ma signature.

J'te l'dis, faut l'écrire plus gros et de couleur pétante. ;)

  • Partager sur Facebook
  • Partager sur Twitter
18 juin 2008 à 11:28:19

Ne confondons pas SQL et STL...

(Humour) La différence entre les deux c'est Qt... :p Je suis déjà dehors.
  • Partager sur Facebook
  • Partager sur Twitter
Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
18 juin 2008 à 11:34:57

lol nanoc
la SQL c'est pour les fenetres et la STL c'est la biblio de C++ c'est ca ?
  • Partager sur Facebook
  • Partager sur Twitter
18 juin 2008 à 11:37:12

Non, SQL c'est un système de gestion de bases de données.
  • Partager sur Facebook
  • Partager sur Twitter
Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
Anonyme
18 juin 2008 à 11:37:50

Citation : hilnius

lla SQL c'est pour les fenetres et la STL c'est la biblio de C++ c'est ca ?


Lis les définitions de wikipédia. ça vaut mieux.
SQL
STL

@Nanoc : :lol: (ça fait du bien en se levant.)
  • Partager sur Facebook
  • Partager sur Twitter
18 juin 2008 à 11:46:55

ouahou j'ai réussi a rien comprendre ^^
  • Partager sur Facebook
  • Partager sur Twitter
18 juin 2008 à 13:26:06

Moi je connais pas les vector et j'arrive à faire les exercices :o
  • Partager sur Facebook
  • Partager sur Twitter
18 juin 2008 à 13:30:37

bon j'ai lu les vectors je pense que je vais essayer de faire ton exo nanoc le niveau 1 (mais moi je fais surtout du QT et tres peu de console)
  • Partager sur Facebook
  • Partager sur Twitter
18 juin 2008 à 13:31:21

Si on a le droit de surcharger l'opérateur =, alors je dois avoir la solution du niveau 1 ^^ .

EDIT : les vectors c'est très simple à comprendre, et c'est beaucoup plus facile que les tableaux en C ;) .
  • Partager sur Facebook
  • Partager sur Twitter
18 juin 2008 à 17:00:53

Citation : Nanoc

J'ai dit que tu pouvais ajouter tout ce que tu voulais.



Même dans le main et la surcharge de l'opérateur<< ??
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
18 juin 2008 à 17:17:48

Pourquoi voudrais-tu modifier l'op << ?
  • Partager sur Facebook
  • Partager sur Twitter
18 juin 2008 à 17:36:05

Non, non. Quand même !

Si tu modifies l'op << et le main, alors tu n'as plus besoin de surcharger l'opérateur virgule pour obtenir le texte affiché dans la console :)
  • Partager sur Facebook
  • Partager sur Twitter
Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
18 juin 2008 à 17:40:52

Évidemment ça aurait été trop simple :p


Citation : Hiura

Pourquoi voudrais-tu modifier l'op << ?



En fait je me suis trompé, je pensais en avoir besoin mais non finalement on en a pas besoin.
  • Partager sur Facebook
  • Partager sur Twitter
18 juin 2008 à 17:49:56

Voilà mon code est envoyé (Opérateur virgule), tous niveaux faits.
Je l'ai trouvé très instructif et très intéressant, continue comme ça.
  • Partager sur Facebook
  • Partager sur Twitter
19 juin 2008 à 21:19:00

J'ai 2 questions sur les exos Nanoc :

- Est-ce que tu as prévu un exercice où il faudra hériter une classe pour lui ajouter des fonctionnalités (comme pour l'opérateur virgule où on hérite la classe vector :) ) ?

- Est-ce qu'il y aura aussi un exo traitant directement des templates ? Parce que sur ce point je suis un peu perdu ^^ ...
  • Partager sur Facebook
  • Partager sur Twitter
19 juin 2008 à 21:20:31

Cet exo traite des templates non ?
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
19 juin 2008 à 21:29:13

le niveau 3 si...
@+
  • Partager sur Facebook
  • Partager sur Twitter
19 juin 2008 à 21:34:37

Citation : youyou

le niveau 3 si...
@+


Oui en effet mais je parlais d'un exo les traitant directement.
  • Partager sur Facebook
  • Partager sur Twitter
19 juin 2008 à 21:34:50

Autant pour moi je pensais qu'il parler de l'exo 1.
  • Partager sur Facebook
  • Partager sur Twitter
19 juin 2008 à 21:43:24

Oui il y aura d'autres exercices de ce type. Pas tout de suite, je préfère altérener les genres.

Pour les templates, tu en as déjà 2 (BigInt et l'opérateur virgule). Je ne vois pas ce que tu entends par des exercices "spécifiques templates". Premièrement, c'est un aspect difficile et donc faire que des templates veut dire que les débutants ne peuvent pas faire. Et de plus les templates servent très souvent à généraliser des algorithmes (ou conteneurs) que l'on peut commencer par écrire pour un type spécifique.
  • Partager sur Facebook
  • Partager sur Twitter
Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.