Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2872 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [c++] template -> sujet d'examen 2004 (problème de compréhension)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[c++] template -> sujet d'examen 2004 (problème de compréhension)

n°1073657
lordankou
Posté le 06-05-2005 à 11:06:14  profilanswer
 

voici le sujet d'un exam des années précédentes :
 

Code :
  1. void main(){
  2.   Article<Libelle><Prix> cl("Dupond" );
  3.   cout << c1[0] << endl ; // affiche le nom du produit
  4.   cout << c1[1] << endl ; // affiche le prix du produit
  5.   Article c2;
  6.   c2[0] = new Libelle("vélo" );
  7.   c2[1] = new Prix(199.0,"euros" );
  8.   cout << c2[0] << endl ; // affiche le nom du produit
  9.   cout << c2[1] << endl ; // affiche le prix du produit


la question est :
Déclarer et implémentez les classes, méthodes ou fonctions nécessaire au bon fonctionnement du programme ci dessus
 
après lecture du sujet je me pose beaucoup de question.
on arrive à une solution du type :

Code :
  1. template <class Libelle, class Prix> class maClass{
  2. private :
  3. Prix monPrix;
  4. Libelle monLibelle;
  5. };


le problème vient de la surcharge des operator [] puisque dans un cas on va utiliser les [] pour de l'affichage et de l'autre pour de l'affectation. or les deux fonctions auront le "même" prototype à savoir :

Code :
  1. // pour l'affichage
  2. template <class Libelle, class Prix> void article<Libelle,Prix>::operator[](int monEntier){
  3.   if (monEntier==0){
  4.     cout<<monPrix.thePrix;
  5.     cout<<monPrix.laDevise;
  6.   }
  7.   else {
  8.     cout<<monLibelle.leLibelle;
  9.   }
  10. }
  11. // pour l'affectation
  12. template <class Libelle, class Prix> Prix& article<Libelle,Prix>::operator[](int monEntier){
  13.   if (monEntier==0){
  14.     return &monPrix;
  15.   }
  16. }
  17. template <class Libelle, class Prix> Libelle& article<Libelle,Prix>::operator[](int monEntier){
  18.   if (monEntier==1){
  19.     return &monLibelle;
  20.   }
  21. }


dans ce cas le compilateur peut-il faire la difference entre les trois fonctions déclarées ci dessus puisqu'elles ont les même entrées mais des types retournés différents ?

mood
Publicité
Posté le 06-05-2005 à 11:06:14  profilanswer
 

n°1073665
Taz
bisounours-codeur
Posté le 06-05-2005 à 11:10:06  profilanswer
 

Article<Libelle><Prix>
 
spa trop possible ça ...

n°1073666
Joel F
Real men use unique_ptr
Posté le 06-05-2005 à 11:12:57  profilanswer
 

l'operator[] ne RENVOIT JAMAIS void
 
Sa forme canonique est
 

Code :
  1. TYPE operator[]( size_t i ) const;
  2. TYPE& operator[]( size_t i );


 
Ce qui m'embete plus c'est d'avoir un [] qui renvoit deux type different selon la valeur de i ....
 
Libelle et Prix derivent ils d'une même classe mére ??

n°1073667
Joel F
Real men use unique_ptr
Posté le 06-05-2005 à 11:13:41  profilanswer
 

Taz a écrit :

Article<Libelle><Prix>
 
spa trop possible ça ...


 
Je l'avais loupé celui la ..
jepense qu'il voulait ecrire :
 
Article<Libelle,Prix>

n°1073676
lordankou
Posté le 06-05-2005 à 11:21:16  profilanswer
 

non c'est bien le sujet. j'ai bien vérifié tout ce que j'ai marqué dans le sujet est bien recopié.
ensuite je ne sais pas si prix et libelle dérive d'une même classe mère. je les auraient implémentés de façon distinct sans aucune dérivation ou héritage.
comme ça :

Code :
  1. class Prix{
  2. }


et  

Code :
  1. class Libelle{
  2. }


Message édité par lordankou le 06-05-2005 à 11:25:48
n°1073680
Joel F
Real men use unique_ptr
Posté le 06-05-2005 à 11:25:37  profilanswer
 

lordankou a écrit :

non c'est bien le sujet. j'ai bien vérifié tout ce que j'ai marqué dans le sujet est bien recopié.


 
Ben c'est un sujet plein d'erreur de syntaxe  :sarcastic:

n°1073683
lordankou
Posté le 06-05-2005 à 11:27:23  profilanswer
 

Joel F a écrit :

Ben c'est un sujet plein d'erreur de syntaxe  :sarcastic:


plein ? y'en a d'autre comme ça ? juste histoire de savoir si je dois batailler comme un abruti pour résoudre un ennoncé faux  :pt1cable:

n°1073691
Joel F
Real men use unique_ptr
Posté le 06-05-2005 à 11:31:54  profilanswer
 

Code :
  1. void main()
  2. {
  3.   Article<Libelle><Prix> cl("Dupond" ); // ERREUR : Article<Libelle,Prix>
  4.   cout << c1[0] << endl ; // affiche le nom du produit
  5.   cout << c1[1] << endl ; // affiche le prix du produit
  6.   Article c2; // ceci implique default template parameters
  7.   c2[0] = new Libelle("vélo" );
  8.   c2[1] = new Prix(199.0,"euros" ); // ceci implqiue que [] retourne un POINTEUR
  9.   cout << c2[0] << endl ; // affiche le nom du produit
  10.   cout << c2[1] << endl ; // affiche le prix du produit


 
L'astuce est la suivante :D
 

Code :
  1. template<class L = Libelle, class P = Prix>
  2. class Article
  3. {
  4. public :
  5. // Forme canonique de Coplien ici
  6. ??? operator[]( size_t i ) const
  7. {
  8. if(i == 0 ) return lib else return px;
  9. }
  10. const ???& operator[]( size_t i )
  11. {
  12. if(i == 0 ) return lib else return px;
  13. }
  14. private :
  15. L* lib;
  16. P* px;
  17. };
  18. ostream& operator <<( ostream& os, const Libelle* l )
  19. {
  20. return os << l->nom();
  21. }
  22. ostream& operator <<( ostream& os, const Prix* l )
  23. {
  24. return os << p.->val() << " " << p->devise();
  25. }


 
Maintenant si Libelel & Prix en derive pas d'une class Base, je vois pas comment ca peut marcher ...


Message édité par Joel F le 06-05-2005 à 11:32:17
n°1073698
skelter
Posté le 06-05-2005 à 11:34:30  profilanswer
 

ca a l'air tordu, je dis peut etre des connerie mais (dans le cas ou libelle et prix ne derivent pas d'une classe polymorphique) Article semble etre une collection de pair<Libelle*,Prix*> avec ses membres de constructions et assignations pour Libelle* et Prix*, operator[] peut retourner std::string

n°1073701
Joel F
Real men use unique_ptr
Posté le 06-05-2005 à 11:36:56  profilanswer
 

certes mais comment va fonctionner l'operator[] d'affectation [:pingouino]

mood
Publicité
Posté le 06-05-2005 à 11:36:56  profilanswer
 

n°1073704
skelter
Posté le 06-05-2005 à 11:40:12  profilanswer
 

ben la pair faites maison (type membre de Article) pourra etre construite avec soit const Libelle* soit const Prix* en initialisant l'autre pointeur à 0

n°1073706
Joel F
Real men use unique_ptr
Posté le 06-05-2005 à 11:41:17  profilanswer
 

plutot sans modifier le deuxieme ;)

n°1073710
skelter
Posté le 06-05-2005 à 11:43:49  profilanswer
 

oui, l'important c'est d'avoir un pointeur initialisé par new et l'autre à 0 pour savoir a quel type on a affaire

n°1073715
lordankou
Posté le 06-05-2005 à 11:48:34  profilanswer
 

ma femelle et moi on a pensé à un truc (moi macho ? nannnnn  :D)
 
si [] retourne soit l'adresse vers un objet de type Prix ou Libelle (selon que l'entier passé en paramètre soit 1 ou 0) on peut donc effectuer l'affectation suivante :

Code :
  1. c2[0] = new Libelle("vélo" );
  2. c2[1] = new Prix(199.0,"euros" );


 
de plus si on surcharge l'operateur << pour la class Libelle et Prix on pourra donc faire :

Code :
  1. cout << c2[0] << endl ; // affiche le nom du produit
  2. cout << c2[1] << endl ; // affiche le prix du produit


 
je me trompe ou c'est plus ou moins ça ?

n°1073720
skelter
Posté le 06-05-2005 à 11:51:41  profilanswer
 

dans ce cas il faut que Libelle et Prix derivent d'une meme classe polymorphique, mais comment expliquer cette instanciation du modele Article
Article<Libelle,Prix>  ?

n°1073734
Joel F
Real men use unique_ptr
Posté le 06-05-2005 à 11:57:53  profilanswer
 

lordankou a écrit :


je me trompe ou c'est plus ou moins ça ?


 
style genre, tu lis le sposts des gens ....

n°1073915
lordankou
Posté le 06-05-2005 à 14:33:42  profilanswer
 

Joel F a écrit :

style genre, tu lis le sposts des gens ....


 
si je lis le post mais j'avoue que j'y comprends pas grand chose (on a programmer aucun exemple sur le polymorphisme et l'héritage et on aurai du programmer un exemple avec les templates mais avec les réformes LMD le nombre de cours à diminuer donc...) donc j'essaie aussi de mon coté de voir si des trucs que je propose peuve marcher !  :cry:

n°1074632
lordankou
Posté le 07-05-2005 à 12:12:52  profilanswer
 

au fait concernant l'erreur suivante :
Article<Libelle><Prix> cl("Dupond" );
il ne semble pas que ça soit une erreur puisque sur un autre sujet on retrouve la même chose.

n°1074666
Taz
bisounours-codeur
Posté le 07-05-2005 à 12:48:06  profilanswer
 

ah si tu le dis.

n°1075212
Joel F
Real men use unique_ptr
Posté le 07-05-2005 à 23:44:50  profilanswer
 

lordankou a écrit :

au fait concernant l'erreur suivante :
Article<Libelle><Prix> cl("Dupond" );
il ne semble pas que ça soit une erreur puisque sur un autre sujet on retrouve la même chose.


 
J'aurais trouver le smiley avec la corde je l'aurais bien utiliser ...
revise tes cours bordel ! ou ouvre le Stroustrup !!!

n°1075417
lordankou
Posté le 08-05-2005 à 11:57:12  profilanswer
 

je comprends absoluement pas votre réaction là !
je me pose des questions sur un sujet d'examen. là vous me dites que le sujet est faux et que ça ne peut pas marcher.
ensuite je chercher des solutions tout en essayant de comprendre les réponses que vous me donnez (bordel je suis qu'à bac+2 n'oubliez pas !)
là je rajoute que le sujet n'a pas l'air faux puisqu'on retrouve la même chose dans un autre devoir et en réponse j'ai droit à :

Citation :

J'aurais trouver le smiley avec la corde je l'aurais bien utiliser ...


Citation :

ah si tu le dis.


 
alors soit le prof est con ce que je doute (d'ailleurs taz si je me trompe pas tu es étudiant à pau donc tu connais ce prof -> il s'agit de bruel) ou alors vous ne savez pas répondre et vous préférez garder la face en disant que le sujet est faux et vous utilisez des termes qu'un newbie ne peut pas comprendre pour paraitre plus intelligent !  
j'ai fais l'effort de comprendre vos réponses alors faites l'effort de répondre autrement qu'en me traitant comme un mec insignifiant !

n°1075420
Taz
bisounours-codeur
Posté le 08-05-2005 à 11:59:19  profilanswer
 

ben Bruel s'est planté.

n°1075436
lordankou
Posté le 08-05-2005 à 12:15:23  profilanswer
 

Taz a écrit :

ben Bruel s'est planté.


 
ok je veux bien une fois ça arrive à tout le monde mais deux années d'affilées je trouve ça bizarre

n°1075499
Taz
bisounours-codeur
Posté le 08-05-2005 à 13:55:55  profilanswer
 

ben écoute, prends ton compilateur et regarde.

n°1085434
Taz
bisounours-codeur
Posté le 16-05-2005 à 14:48:53  profilanswer
 

tu seras là au tutorat ?

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [c++] template -> sujet d'examen 2004 (problème de compréhension)

 

Sujets relatifs
Problème phpBB avec les logos nouveau message, forum verrouillé...probleme base de donnée
Probleme de div :xproblème de remplissage d'une datagrid
Problème de stockage de données d'un formulaire...Problème lié a l'ouverture de fichier
Probleme JSP JavaScript !!Probleme JSP JavaScript !!
Probleme JSP JavaScriptSujet clos
Plus de sujets relatifs à : [c++] template -> sujet d'examen 2004 (problème de compréhension)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR