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 :

Déclaration de classes et méthodes externes


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 48
    Points : 46
    Points
    46
    Par défaut Déclaration de classes et méthodes externes
    Bonjour à tous,

    Je vais essayer de vous resumer brièvement mon problème.
    J'ai créé une classe DATA qui est en fait une classe générique réunissant différentes autres classes (COMPLEX, REAL, RATIONAL, INTEGER, NATURAL).
    J'ai ensuite définit une classe MATRIX qui est juste une implémentation de matrice d'éléments de type DATA.
    Et je voudrais maitenant que MATRIX puisse être à son tour utilisée comme un "type" de DATA (pour par exemple pouvoir déclarer des matrices de matrice... je sais c'est un peu tiré par les cheveux mais c'est ce que je veux faire !)

    et c'est là qu'est mon probleme... J'ai donc ma classe DATA définie dans un .h et un .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
     
    class DATA
    {
    private:
    	unsigned char Id;
    	void *Data;
    public:
    	DATA(void);
    	DATA(const NATURAL& natural);
    	DATA(const INTEGER& integer);
    	DATA(const RATIONAL& rational);
    	DATA(const REAL& real);
    	DATA(const COMPLEX& complex);
    	DATA(const MATRIX& matrix);
    	~DATA(void);
    	void operator=(const DATA& data);
     	bool operator==(const DATA& data) const;
     	bool operator!=(const DATA& data) const;
     	DATA operator+(const DATA& data) const;
                    /* etc ... */
    };
    et ma classe MATRIX définie dans un autre .h et .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
     
    #include "DATA.h"
     
    class MATRIX
    {
    private:
    	unsigned int L;
    	unsigned int C;
    	DATA *Array;
    public:
    	MATRIX(void);
    	MATRIX(const DATA& data);
    	MATRIX(unsigned int l, unsigned int c);
    	MATRIX(unsigned int l, unsigned int c, DATA *array);	
    	~MATRIX(void);
    	void operator= (const MATRIX& m);
    	bool operator== (const MATRIX& m) const;
    	bool operator!= (const MATRIX& m) const;
    	MATRIX operator+ (const MATRIX& m) const;
                    /* etc ... */
    };
    et je voudrais pouvoir utiliser à leur tour les méthodes de la classe MATRIX dans la classe DATA. Pour cela ne pouvant pas inclure "MATRIX.h" dans "DATA.h" (sinon on tourne en rond) je voulais déclarer les méthodes de MATRIX en tant que méthodes externes dans DATA.h ... mais le compilo refuse des trucs du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class MATRIX
    {
    public:
    	extern MATRIX(void);
    	extern void operator= (const MATRIX& m);
                    /* etc ... */
    };
    dans "DATA.h" car à mon avis je dois mal m'y prendre... Quelqu'un saurait-il comment déclarer des méthodes de classes externes ??? Merci beaucoup pour votre aide !!

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 41
    Points : 45
    Points
    45
    Par défaut
    Salut,

    pour ce qui est des méthode externes d'une classe dans une autre je ne peux pas t'aider. Par contre pour ce qui est de faire de ta classe MATRIX une DATA il n'y a rien de plus simple
    Il suffit de faire dériver ta classe MATRIX de ta classe DATAcomme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Data
    {
      /* toutes tes déclarations */
    };
     
    class Matrix : public Data
    {
      /* encore des déclarations */
    };
    De plus je vois dans ta classe Data une ligne qui me gène un peu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DATA(const MATRIX& matrix);
    cette ligne devrait te permettre de faire d'une Matrix une Data, or c'est exactement ce que tu demande... Avec le nouvel héritage tu devrais pouvoir être plus générique et faire une méthode du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DATA(const DATA& data);
    puisque tes matrix sont des data. De plus ça se généralise au bipoints, aux veteurs de rang n, etc...

    et un petit ajout :
    En fait une fois fait l'héritage tupeux effectivement appeler les méthodes d'une Matrixà partir d'une Data. Il faut alors definir les prototypes de tes méthodes dans la classe Data en virtuel :
    [/code]virtual int trace();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     par exemple. Mais il faut alors faire attention à qui appel quoi ! En effet un data apelera la méthode Data::trace() alors qu'une Matrix appelera la méthode Matrix::trace(). Le plus simple alors est de faire en sorte que les méthode de ta classe Data ne fassent rien.
     
    Tarrke

  3. #3
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Salut...

    Juste comme ça, au passage, intéresse toi aux templates, je pense qu'ils te permettront de faire ce que tu veux (et peut-être même un peu plus )
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  4. #4
    Membre habitué Avatar de Crisanar
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 162
    Points : 137
    Points
    137
    Par défaut
    J'ai peut-être mal compris la question, mais un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #ifndef _DATAH_
    #define _DATAH_
     [...]
     
    #endif
    ne réglerait pas le problème?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 48
    Points : 46
    Points
    46
    Par défaut
    Merci beaucoup pour toutes vos réponses, ça répond je pense à mon problème ! Effectivement je vais m'intéresser aux templates !...

  6. #6
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    hésite pas à revenir mettre un résolu (en bas à gauche) si ça règle ton problème
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 48
    Points : 46
    Points
    46
    Par défaut
    Excuse... je vais immediatement ajouter la balise résolu !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/07/2010, 14h13
  2. Pointeurs de classes et méthodes
    Par insomniak dans le forum C++
    Réponses: 9
    Dernier message: 10/05/2006, 15h18
  3. [ActiveX] Retour de BSTR sur une méthode externe
    Par mr.saucisse dans le forum MFC
    Réponses: 28
    Dernier message: 11/01/2006, 15h47
  4. Déclaration de classe
    Par EntraX666 dans le forum Langage
    Réponses: 5
    Dernier message: 29/10/2005, 10h49
  5. Réponses: 5
    Dernier message: 10/11/2004, 19h44

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