begin process at 2012 05 27 17:47:46
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Application

 > UNE PILE TEMPLATES + SURCHARGE OPERATEUR

UNE PILE TEMPLATES + SURCHARGE OPERATEUR


 Information sur la source

Note :
Aucune note
Catégorie :Application Classé sous :pile, stack, templates, surcharge Niveau :Débutant Date de création :07/02/2006 Vu / téléchargé :5 304 / 421

Auteur : ffraggy

Ecrire un message privé
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

 Description

Un code-source ss pretention, pour montrer la puissance des templates, avec qqch de simple.
En plus, j'ai surchargé les opérateurs ">>"(pop) et "<<"(push)
J'attends vos commentaires ;)



 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   templates pile

Télécharger le zip


 Sources du même auteur

Source avec Zip DATE EN OBJET SOUS C++
Source avec Zip FONCTION VIRTUELLES (PROGRAMME SIMPLE ET COMMENTÉ)
Source avec Zip UN 421 CONCEPT OBJET
Source avec Zip THÉORIE DES GRAPHES
Source avec Zip DVDTHÈQUE

 Sources de la même categorie

Source avec Zip Source avec une capture PROGRAMME DE SUDOKU par AffreuxJojp
Source avec Zip EVALUATEUR D'EXPRESSION ARITHMÉTIQUE par matrx180vTitanium
Source avec Zip Source avec une capture QBIBLIO GESTION DES PRÊTS par conatic
Source avec Zip Source avec une capture QL-CHATROOM V 1.0 par mature
Source avec Zip Source avec une capture GEOLOCALISATION par ganjarasta

 Sources en rapport avec celle ci

Source avec une capture STACK WATCHER par lilxam7
Source avec Zip BIBLIOTHÈQUE DE GESTION DES PILES DYNAMIQUES EN C par Sunglasses
Source avec Zip BIBLIOTHÈQUE DE GESTION DES PILES STATIQUES EN C par Sunglasses
Source avec Zip Source avec une capture RÉSOLUTION DE LABYRINTHE AVEC PILE par damned3
Source avec Zip HEADER POUR GERER UNE PILE DYNAMIQUEMENT par deck_bsd

Commentaires et avis

Commentaire de mickbad le 07/02/2006 15:57:39

Salut,

Je reste dubitatif sur ces fonctions dans ta classe:
int operator ++()
int operator --()

1°) la surcharge des opérateurs ++ et -- ne se déclare *généralement* pas comme ça même si le compilateur ne te crie pas dessus (c'est le cas chez moi avec cygwin/gcc). La déclaration se ferait plutôt comme suit (*mais* juste un exemple)
T& operator++ (T& val)

2°) dans le main l'utilisation de ++ serait alors fausse:
--> Stack <float> ti(40);
--> [...]
--> ti++; /* ERREUR : => tt.operator++(1) not found! */

3°) dans le contenu de ces fonctions
--> //renvoie 1 si pile pleine sinon 0
--> return (count==size_max) ?(1):(0);
mouaip, tu veux faire quoi au juste avec ton ++ et ton -- ?

Voilà pour la partie des surcharges.

Au niveau du reste du code : attention une fuite de mémoire est détectée => tu alloues tab dans ton constructeur mais aucune trace de sa désallocation (pas de destructeur aussi tiens).
Ok pour des types simples (int, float), le compilateur va peut être créer un "bon" destructeur pour supprimer ton "tab" mais imagine que tu utilises à la place une structure de données complexe ... oulala!
Rien ne vaut de le faire soi-même => JAMAIS faire confiance au compilateur!!

En restant sur le même sujet, dans le main, tu vas crée une pile de 1 élément. Le programme peut (dans l'état) fonctionner normalement *mais* dans un plus grand programme, tu vas avoir de sérieux problèmes. En effet, lorsque ta pile sera rempli (1 élément) et lors de l'insertion d'un nouvel élément, tu écriras *n'importe où* dans la zone mémoire au risque d'écraser tes autres allocations!
Suis-je clair ?

Pour résumer tu peux avoir ce cas là (en gros, hein?)
(mémoire <=> case à remplir)
char* s alloué et rempli => |t|e|s|t|\0| (5 cases)
Stack <float> ti(1) idem => |1.0| (1 case)

ti << 99; (comprends pas trop comment tu veux faire fonctionner ça mais admet-on)

Au niveau mémoire, la valeur 99 ne vas pas forcément s'écrire comme suite à 1.0 mais peut être dans ta chaîne: par exemple s => |t|e|99.0|t|\0|

fun, non ?


Enfin, ton exit(-1) dans ton constructeur .. mouaip!
=> une erreur d'écriture de code et paf, te voilà jeté du programme, là pour le coup pas fun :)!


Bon, l'idée est bonne mais tu as du boulot !
pense aussi à séparer la partie déclaration de ta classe et définition des fonctions membres (2 fichiers :)

.Mick.

Commentaire de mickbad le 07/02/2006 16:06:13

autant pour moi avec
int operator ++()
int operator --()

Le compilateur ne dit rien car ya rien de faux là dedans !

Vu que c'est assez rare que j'utilise ces surcharges (++, --), j'en oublie un peu les fondamentaux ;)

héhé!

.Mick.

Commentaire de e52guill le 10/05/2006 11:53:14

Bonjour Mickbad

En lisant ton commentaire me vient une réaction quant à la séparation de la déclaration du fichier de la définition (l'eternel fracture .h .cpp). Lorsque l'on crée un patron de classe, je pensais que la déclaration des fonctions de la classe devait se faire dans le même fichier. Est ce que je me trompe?

Commentaire de mickbad le 10/05/2006 15:39:02

Salut,

Avant de te répondre, connais-tu la différence entre déclarer et définir une fonction ? Si oui tant mieux mais au cas où :
- Déclaration ou prototype (même ça s'applique plus ailleurs) est le moyen de dire au compilateur qu'une fonction existe et qu'elle peut être appelée
- Définition est juste le contenu de la fonction (le compilateur va dans cette "définition" lors d'un appel)

Le .h du terme header devrait contenir toutes les déclarations ou macros, prototypes, structures (struct, enum, union, class ...) d'un programme. J'utilise le conditionnel car c'est une bonne façon de faire qui existe depuis le début du C (même avant).

Alors oui, les déclarations des fonctions d'une classe (appelées aussi méthodes) doivent se faire dans le même fichier où il y a les termes 'class gnagna { ... }; '
c'est logique car il s'agit de la "déclaration" de la classe.

Bien sûr (en terme objet), tu peux "définir" des méthodes de classe dans le .h si elles sont de type inline (à peu près équivalent aux macros).

Pourquoi faire un .h alors qu'on peut tout faire dans un CPP ?
réponse : la réutilisation pour plusieurs parties de code.
Quand ton programme possède plusieurs fichier .cpp, il est compilé par module le plus souvent donc chaque .cpp donne un .obj ou .o (dépend où on se trouve :)), ensuite "on" assemble les .obj/.o pour un exécutable

En plus clair ton programme comporte 2 fichier .cpp avec le même .h (déclaration d'une classe). Si en fait ta déclaration de classe se faisait dans chaque .cpp, la compilation se passera bien (car modulaire) mais lors de l'assemblage le 2e .obj généré provequera une erreur : la classe existe déjà !!

m'enfin juste en aparté :)


Donc tu as raison, les déclarations dans le .h et les définitions (sauf macros ou inline) dans le .cpp

.Mick.

Commentaire de e52guill le 10/05/2006 20:44:22

Bonjour

On est bien d'accord sur les termes définitions et déclarations, on déclare dans le h et on définit dans le cpp. En revanche et comme je n'ai pas les sources (pas membre), je me posais des questions à propos de cette règle lorsque l'on utilise des templates: à savoir que dans un patron de classe on réalise la définition des fonctions membres dans le header.

Peux tu me confirmer celà ou au contraire me dire si il est possible de définir les fonctions membres d'un patron de classe dans le cpp (comme on le fait d'habitude avec des classe qui ne sont pas préfixé de template<typename T>).

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Utilisation de stack en C++ [ par jagdjg ] J essaie de faire un stack mais ca ne marche pas La declaration est : Stack* pile = new Stack();le push : pile-&gt;Push(strPile);le pop : strPile = pi [C] Généricité et cast automatique. [ par LocalStone ] Salut, Alors voilà ... Je me posais la question suivante : existe-t-il un moyen en C de gérer la généricité de manière transparente ? Je m'explique .. stack et char * [ par yuriashford ] Salut &#224; tous je developpe actuellement une application qui utilise une stack de STL&nbsp; la stack est une declar&#233; : stack&lt;char *&gt; pil Pile de double [ par Pof ] Bonjour ! voil&#224; j'ai un petit probl&#232;me avec les std::stack :std::stack&lt;double&gt; stack;stack.push(20);stack.push(10);[...]double a = sta Pb avec les piles et les files [ par manta7 ] Salut &#224; tous, j'ai essay&#233; de cr&#233;er un programme qui permet de g&#233;rer les piles et les files mais le programme suivant a tout le tem TCP/IP Stack [ par anahouana ] Bonjour, j'ai un projet dans lequel je dois comprendre le code sourc dTCP/IP et la nation de  la pile de TCP/IP ...donc si vous avez déja le code sour Bibliotheque statique et templates [VC++] [ par MyXiLo ] Bonjour,J'ai une bibliotheque statique qui contient des classes "normales" et des classes templates, la compilation ne pose aucun soucis mais lorsque Pb de templates [ par tintin72 ] Bonjour, J'ai un pb avec une liste chainée géré par des templates. Tant que l'information à stocker dans la liste est de type classique (int, float Testez le typename avec une classe utilisant les templates [ par amorosalain ] [size=6][b][i]SAM[/i][/b][/size=6]Bonjour à tous.J'ai besoin d'un peu d'aide.J'ai une classe ou j'utilise un template.template&lt;typename T&gt;maclas


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,562 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales