IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

am�lioration d'une classe


Sujet :

C++

  1. #1
    Membre �prouv�
    Inscrit en
    Novembre 2006
    Messages
    1 073
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par d�faut am�lioration d'une classe
    Il s'agit d'une classe que j'ai faite moi meme en m'inspirant de
    d'un tuto sur les listes chain�es.

    Il s'agit d'un truc de d�butant/

    alors que pensez vous de ma classe:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class Node {
    public: 
    	Node();//constructeur par défaut (?)
    	Node(int d, Node* p): data(d), next(p){}//quel type de constructeur (?)
    	~Node();
    	int data;
    	Node* next;
    	void push(Node**,int);
    	void view(Node* );
    	void supr(Node**);
    };
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    void Node::push(Node** mapile,int valeur){
        Node* element=new Node(valeur,*mapile);
         *mapile=element; 
    }
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    void Node::view(Node* pile){
      while( pile ){
    		cout<<(*pile).data;
           pile=pile->next;   
      }
     
    }
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    void Node::supr(Node** mapile){
    	Node* temp=(*mapile)->next;
    	(*mapile)=temp;
    }
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    void main(){
    	 int n;
    	 Node* p=NULL;	p->push(&p,3);p->push(&p,7);p->push(&p,9);p->push(&p,8);//push(&p,1);push(&p,5);push(&p,4);push(&p,2);
    	 Node* j=(*p).next;	 
    	 p->supr(&p);p->view(p);
     }
    voila c'est une pile, une liste chain�e plus exactement.
    je cherche a l'am�liorer en mettant par exemple des "static" ou autre am�liorations.

  2. #2
    Membre �clair�
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    291
    D�tails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Avril 2007
    Messages : 291
    Par d�faut ???
    Bonsoir,
    je ne suis pas une pro du c++ donc il y a peut etre des choses que je ne connais pas ou ne comprends pas, mais...
    On dirait pas une classe...
    D'abord parce que tu passe en parametre de methodes de ta classe des objets de celle-ci... Aucune utilisation de this et de ces avantages...

    La pile c'est donc data je suppose (un attribut donc plutot private ou protected mais pas public). Ah non c'est pas data... (apres relecture )
    Je comprends pas comment tu as construis ta classe...

    Tu pourrais expliciter davantage s'il te plait?

  3. #3
    Membre �prouv�
    Inscrit en
    Novembre 2006
    Messages
    1 073
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par d�faut
    La pile c'est donc data je suppose (un attribut donc plutot private ou protected mais pas public). Ah non c'est pas data... (apres relecture )

    >>benn non, la classe c'est "node".
    Telle que je l'ai cr�ee, les objets instanci�s par cette classe sont des "noeuds" qui contiennent une valeur (data) et qui pointent sur le noed suivant.

    Aucune utilisation de this et de ces avantages...
    >>je vais voir comment on peut am�liorer ca, en utilisant des this.

  4. #4
    Membre �clair�
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    291
    D�tails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Avril 2007
    Messages : 291
    Par d�faut
    Rien � faire...
    A part le constructeur je vois pas a quoi �a sert.
    C'est juste une classe avec deux valeurs : un int et un pointeur sur le noeud suivant. Donc les operations push et cie de la pile devrait etre en dehors de la classe non? Puisque c'est pas une pile c'est juste un element de la pile
    Il faudrait juste des getters et setters sur les attributs (en private)...
    Qu'en penses tu?

  5. #5
    Membre �prouv�
    Inscrit en
    Novembre 2006
    Messages
    1 073
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par d�faut
    Donc les operations push et cie de la pile devrait etre en dehors de la classe non? Puisque c'est pas une pile c'est juste un element de la pile
    je suis d'accord avec toi, c'�tait juste pour m'entrainer.

    j'aurais pu simplement utiliser les struct ou les typedef struct

  6. #6
    Membre �clair�
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    291
    D�tails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Avril 2007
    Messages : 291
    Par d�faut
    Oui c'est sur.
    Le probleme c'est que l� en plus y a pas la philosophie objet derriere. Pourquoi ne pas faire une classe pile? Ce serait beaucoup plus interressant! avec un CArray de nodes en attributs par exemple...

    Au fait hesites pas � utiliser la fonction "citer" du forum c'est plus sympa � lire.

    Sur ce, je vais aller dormir !

    Bonne soir�e

  7. #7
    Membre �m�rite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par d�faut
    On ne programme pas en C comme on programme en C++. Le C++ permet d'encapsuler ses donn�es, ce dont tu ne profites pas. Et il est toujours louche d'avoir dans une classe des m�thodes qui prennent en param�tre cet m�me classe. Toutes tes m�thodes pourraient tr�s bien �tre statiques, ce qui n'a plus d'int�r�t dans une classe.

    J'ai r��cris en vitesse ta classe pour te montrer. C'est compl�tement rediscutable. Remarque qu'il n'y a plus de Node en param�tre des m�thodes.

    Pour terminer, je te conseillerai, comme je te l'ai d�j� dit pr�c�demment de suivre des tutoriaux de C++ et de regarder la STL puisque tu veux apprendre le C++. On ne pense malheureusement pas de la m�me fa�on en C qu'en C++.


    typedef struct
    pas de typedef struct en C++

    list.h
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    struct node;
     
    class List {
     public: 
      List();
      ~List();
      void push(int);
      void view();
     private :
      node *base; // Premier element de la liste
      node *heap; // Tete de la liste
    };
    list.cpp
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    #include "list.h"
     
    #include <iostream>
    using namespace std;
     
    struct node {
      int data;
      node *next;
      node (int d, node *n) : data (d), next (n) {}
    };
     
    List::List () : base (NULL), heap (NULL) {}
     
    List::~List () {
      node *next = base;
      while (next != NULL) {
        node *current = next;
        next = next->next;
        delete current;
      }
    }
     
    void List::push(int valeur){
      node *element = new node (valeur, NULL);
      if (base == NULL) base = element;
      if (heap != NULL) heap->next = element;
      heap = element;
    }
     
    void List::view(){
      node *pile = base;
      while (pile) {
        cout << pile->data << " ";
        pile = pile->next;
      }
      cout << endl;
    }
    listmain.cpp
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include "list.h"
     
    int main(){
      List l;
      l.push (3);
      l.push (7);
      l.push (9);
      l.push (8);
      l.view ();
      return 0;
    }

  8. #8
    Membre �prouv�
    Inscrit en
    Novembre 2006
    Messages
    1 073
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par d�faut
    J'ai r��cris en vitesse ta classe pour te montrer. C'est compl�tement rediscutable. Pour terminer, je te conseillerai, comme je te l'ai d�j� dit pr�c�demment de suivre des tutoriaux de C++ puisque tu veux apprendre le C++. On ne pense malheureusement pas de la m�me fa�on en C qu'en C++.
    J'ai lu que le C++ n'est pas un sous ensemble du C, mais de la a dire qu'on ne pense pas de la meme facon...

    Je veux bien te croire, mais Je me suis inspir� d'un livre de C++ pour faire cette classe:

    Celui de Dehanoy, et celui aussi de John Hubbard, qui sont des livres de C++


    pas de typedef struct en C++
    je veux pas te contredire, mais vas dans le livre de Stroustrup, page 84:
    tu verras, il est �crit:
    4.9.7 Typedef
    A declaration prefixed by the keyword typedef declares a new name for the type.....


    Merci pour le code.

  9. #9
    Membre �m�rite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par d�faut
    Le C est un langage imp�ratif.
    Le C++ est un langage objet.
    On ne con�oit, pense donc pas de la m�me fa�on.

    je veux pas te contredire
    Oui, j'aurais du pr�ciser.

    En C, on fera
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    typedef struct {
      int data;
      node *next;
    } node;
    mais en C++, le code suivant suffira
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    struct node {
      int data;
      node *next;
    };
    Mais bien s�r, typedef est utile de mani�re g�n�rale en C++.

  10. #10
    Membre �prouv�
    Inscrit en
    Novembre 2006
    Messages
    1 073
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par d�faut
    Ok,
    mais en tout cas, ce que j'ai lu en C++ m'a permis de comprendre des trucs en C et vice versa.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    List::List () : base (NULL), heap (NULL) {}
    Il s'agit d'un constructeur.
    C'est bizarre comme notation. j'aurais fait:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    List::List() {
    base=NULL;
    heap=NULL
    }
    De la meme maniere, quelle est la diff entre:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    node (int d, node *n) : data (d), next (n) {}
    et (si ca existe)

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    node (int d, node *n) { data=d, next=n }

  11. #11
    Membre �m�rite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865

  12. #12
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    Citation Envoy� par deubelte Voir le message
    J'ai lu que le C++ n'est pas un sous ensemble du C, mais de la a dire qu'on ne pense pas de la meme facon...
    Je pense qu'on r�fl�chis dans les deux langage avec les m�mes principes en t�te, mais que les moyens permettant de les mettre en oeuvre sont tr�s diff�rents.

    Citation Envoy� par deubelte Voir le message
    Je veux bien te croire, mais Je me suis inspir� d'un livre de C++ pour faire cette classe:

    Celui de Dehanoy, et celui aussi de John Hubbard, qui sont des livres de C++
    Le deuxi�me, je connais pas, mais les Delannoye que j'ai pu feuilleter �taient assez catastrophiques. Il parrait qu'il s'est un peu am�lior� dans les derni�res �ditions, mais j'ai quand m�me un a priori n�gatif.


    Citation Envoy� par deubelte Voir le message
    je veux pas te contredire, mais vas dans le livre de Stroustrup, page 84:
    tu verras, il est �crit:
    4.9.7 Typedef
    A declaration prefixed by the keyword typedef declares a new name for the type.....
    En C++, en effet, typedef existe, et permet de d�clarer un nouveau nom pour un type existant. L�, tu es en train de d�finir un nouveau type, et m�me si ta syntaxe est correcte (par compatibilit� avec le C), je ne connais personne qui l'emploie en C++. On pr�f�re la notation plus directe :
    class X { };
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

  13. #13
    Membre �prouv�
    Inscrit en
    Novembre 2006
    Messages
    1 073
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par d�faut
    Le deuxi�me, je connais pas, mais les Delannoye que j'ai pu feuilleter �taient assez catastrophiques.
    en fait, c'etait le livre d'exercice que j'ai

    mais d'apres ce que j'ai vu, il n'y a pas de bons lives en C++

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 3
    Dernier message: 05/09/2006, 18h41
  2. R�ponses: 14
    Dernier message: 15/01/2004, 01h15
  3. Conception d'une classe parente
    Par VincentB dans le forum Langage
    R�ponses: 9
    Dernier message: 24/06/2003, 17h28
  4. Variable d'une Classe Anc�tre
    Par G�nie dans le forum Langage
    R�ponses: 3
    Dernier message: 18/09/2002, 19h24
  5. Sortir un typedef d'une classe
    Par Theophil dans le forum C++Builder
    R�ponses: 13
    Dernier message: 03/07/2002, 17h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo