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 :

heritage et c++


Sujet :

C++

  1. #1
    Membre régulier Avatar de Nono Sto
    Profil pro
    Inscrit en
    mars 2009
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2009
    Messages : 350
    Points : 74
    Points
    74
    Par défaut heritage et c++
    Cheres amies amis du forum
    je suis sur la création d'un programme d'exercices de calcul mentale. J'ai crée une classe fraction. Je souhaite créer une classe exercice (somme, multiplication,...)qui incorpore des fonctions erreur pour creer des qcm, cependant j'ai un doute est ce que ma classe exercice doit elle hériter de ma classe fraction?
    En règle générale pour mon programme est ce ma classe exercice doit elle herité de toute les classe qui manipule des chiffre.

    merci

  2. #2
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2005
    Messages
    3 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : juin 2005
    Messages : 3 506
    Points : 6 640
    Points
    6 640
    Par défaut
    la réponse est non

    vous devriez revoir la signification de l'héritage (au programmation objet, indépendamment de C++)
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  3. #3
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    octobre 2004
    Messages
    11 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : octobre 2004
    Messages : 11 489
    Points : 29 807
    Points
    29 807
    Par défaut
    Salut,

    L'héritage est la relation la plus forte que l'on puisse trouver entre deux classes car il s'agit d'une relation EST-UN.

    Tu ne dois réellement l'envisager que si tu peux dire sans l'ombre d'un doute qu'un objet de la classe dérivée EST-UN objet de la classe de base (qu'il peut sans problème passer pour un objet de la classe de base et qu'il peut être utilisé comme tel, quitte à perdre quelques fonctionnalités.)

    Un exercice n'est pas une fraction, pas plus qu'il n'est une addition, une soustraction ou quoi que ce soit: il présente ou il contient l'un ou l'autre de ces objet.

    Par contre, tu pourrais envisager la création d'une classe "Problème" (peut être très mal nommée ici) qui disposerait:
    1. des deux opérandes (gauche et droite)
    2. d'une fonction (virtuelle pure) "afficher"
    3. d'une fonction (virtuelle pure) "resultat"
    Et dont hériteraient les classes fraction, addition, multiplication, etc.

    L'exercice serait alors composé d'un pointeur sur problème, d'une quantité donnée (souvent 4 ) de propositions, et d'une indication sur "la bonne solution".

    Il présenterait (lui aussi), entre autre, une fonction afficher qui invoquerait... la fonction afficher au départ du pointeur de problème.

    Lorsque tu crées ton test (plusieurs exercices ), tu crées chaque exercice séparément en lui passant un "problème" particulier (une fraction ou une addition ou une ...) les propositions et l'indication sur la bonne solution.

    Lors de l'exécution, tu parcourrais alors tous les exercices afin de les faire s'afficher et de gérer la réponse obtenue
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Membre régulier Avatar de Nono Sto
    Profil pro
    Inscrit en
    mars 2009
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2009
    Messages : 350
    Points : 74
    Points
    74
    Par défaut
    Un grand merci pour toute ces indications elle m'aide beaucoup
    en réalité j'ai reussi à resoudre quasiment tout les probleme inhérent à mon programme, que se soit la generation d'exercice la création de pdf, d'interface graphique pour enregistrer le nouveaux fichiers.
    Il ne me reste que l'interface graphique utilisateur, mais sa je le garde pour lafin.
    J'en suis au stade ou je réecrit mes solutions dans un programme en dur, et c'est la que je bloque je manque de methodologie et de pratique pour pouvoir créer un code cohérent et robuste tous en exploitant au maximum la conception objet pour laquelle vous avez devineé je suis débutant.

  5. #5
    Membre régulier Avatar de Nono Sto
    Profil pro
    Inscrit en
    mars 2009
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2009
    Messages : 350
    Points : 74
    Points
    74
    Par défaut Création d'exercice
    Chères amies , amis du forum

    J'ai repris mon vieux projet qui me tiens tant à coeur.

    J'ai essayé d'appliquer les idées de koala01 et voici un premier jet. J'ai essayé d'implémenter deux classes, la classe Probleme et Exercice.

    Toutes les deux sont des classes Template :

    1)j'ai plusieurs type d'opérande, et je souhaite reutilsé mes fonctions

    2) je ne connait pas à l'avance le type de mes opérandes (int, double ou fraction)

    J'ai effectué un test en essayant de creer une variable test issu de la classe Probleme

    Cependant j'ai deux message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1>c:\documents and settings\propriétaire\mes documents\visual studio 2008\projects\numerical_test\numerical_test\main.cpp(12) : warning C4930: 'Probleme<Type1,Type2> test(void)'*: fonction prototypée non appelée (était-ce la définition de variable souhaitée*?)
    et le second qui apparait 15 fois:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    c:\documents and settings\propriétaire\mes documents\visual studio 2008\projects\numerical_test\numerical_test\probleme.cpp(3) : error C2955: 'Probleme'*: l'utilisation d'une classe modèle requiert une liste d'arguments modèle
    1>        c:\documents and settings\propriétaire\mes documents\visual studio 2008\projects\numerical_test\numerical_test\probleme.h(12)*: voir la déclaration de 'Probleme'
    Voici mon code:

    main.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
    #include <time.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <iostream>
     
    #include "Probleme.h"
    //#include "Exercice.h"
     
    void main()
    {
        Probleme <int,int> test();
     
    }
    Probleme.h
    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
    #ifndef ProblemeH
    #define ProblemeH
     
    #include <math.h>
    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    #include <string.h>
     
    template <class Type1,class Type2> 
    class Probleme
    {
        private:
                Type1 m_operande_1;
                Type2 m_operande_2;
        public:
                Probleme();
                Probleme(Type1 operande_1,Type2 operande_2);
                ~Probleme();
    };
     
    #endif
    Probleme.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
    #include "Probleme.h"
     
    Probleme::Probleme()
    {
        int m_operande_1=0;
        int m_operande_2=0;
    }
     
    Probleme::Probleme(Type1 operande_1, Type2 operande_2)
    {
        m_operande_1=operande_1;
        m_operande_2=operande_2;
    }
     
    Probleme::~Probleme()
    {
     
    }
    Exercice.h

    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
    #ifndef ExerciceH
    #define ExerciceH
     
    #include "Probleme.h"
     
    template <Probleme *probleme,class Type1,class Type2> 
    class Exercice
    {
        private:
                Probleme *m_probleme;
                Type1 m_proposition [4];
                Type2 m_solution [4];
        public:
                Exercice();
                ~Exercice();                        
    };
     
    #endif
    Exercice.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include "Exercice.h"
     
    Exercice::Exercice()
    {
        m_probleme = new Probleme;
        m_proposition [4] = {0};
        m_solution [4] ={0};
    }
     
    Exercice::~Exercice()
    {
        delete m_probleme;
    }
    Est ce que je suis sur la bonne voix, et si oui pourquoi cela ne marche pas.
    merci

  6. #6
    Membre chevronné Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    mai 2007
    Messages
    959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : mai 2007
    Messages : 959
    Points : 1 868
    Points
    1 868
    Par défaut
    Bonjour,

    Lors de l'utilisation de template, la définition des fonctions doit être dans le .h de la classe. Sois dans la classe elle-même, sois en dessous en redonnant avant chaque fonctions la déclaration des paramètres du template.
    exemple:
    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
    template <class Type1,class Type2> 
    class Probleme
    {
        private:
                Type1 m_operande_1;
                Type2 m_operande_2;
        public:
                Probleme()
                {
                    int m_operande_1=0;
                    int m_operande_2=0;
                }
     
                Probleme(Type1 operande_1, Type2 operande_2);
     
    };
     
    template <class Type1,class Type2>
    Probleme<Type1,Type2>::Probleme(Type1 operande_1, Type2 operande_2)
    {
        m_operande_1=operande_1;
        m_operande_2=operande_2;
    }
    Edit: Je pense également que on peut les mettrent dans le cpp uniquement si elle sont spécialisées...
    Homer J. Simpson


  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Moi, j'ai une question pour Nono_Sto.
    Votre but est-il de créer un programme de calcul mental ou d'apprendre l'utilisation des template, et des classes en général?

  8. #8
    Membre régulier Avatar de Nono Sto
    Profil pro
    Inscrit en
    mars 2009
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2009
    Messages : 350
    Points : 74
    Points
    74
    Par défaut
    Cheres amies, amis

    J'ai repris vos indications, alors pour ma classe Probleme elle s'instancie sans aucun soucis.

    Par contre ma classe Exercice ne fonctionne pas.
    Voici les 2 erreurs que m'affiche mon compilateur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error C2975: 'Exercice'*: argument template non valide pour 'probleme', expression constante évaluée au moment de la compilation attendue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error C2514: 'Exercice'*: la classe n'a aucun constructeur
    mon main:

    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
    #include <time.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <iostream>
     
    #include "Probleme.h"
    #include "Exercice.h"
     
    void main()
    {
        int a = 0;
        int b = 0;
     
        int tab1 [4]={0};
        int tab2 [4]={0};
     
        Probleme <int,int> test(a,b);
        Exercice <Probleme,int, int> test2(*test, tab1, tab2);
    }
    Probleme.h

    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
    #ifndef ProblemeH
    #define ProblemeH
     
    #include <math.h>
    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    #include <string.h>
     
    template <class Type1,class Type2> 
    class Probleme
    {
        private:
                Type1 m_operande_1;
                Type2 m_operande_2;
        public:
            //constructeurs
                Probleme()
                {
                    int m_operande_1=0;
                    int m_operande_2=0;
                }
     
                Probleme(Type1 operande_1, Type2 operande_2)
                {
                    m_operande_1=operande_1;
                    m_operande_2=operande_2;
                }
            //destructeur
                ~Probleme()
                {
     
                }    
    };
    #endif
    Exercice

    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
    #ifndef ExerciceH
    #define ExerciceH
     
    #include "Probleme.h"
     
    template <Probleme *probleme, class Type1,class Type2> 
    class Exercice
    {
        private:
                Probleme *m_probleme;
                Type1 m_proposition [4];
                Type2 m_solution [4];
        public:
                Exercice()
                {
                    m_probleme = new Probleme;
                    m_proposition [4] = {0};
                    m_solution [4] = {0};
                }
                Exercice(Probleme *probleme,Type1 proposition [4],Type2 solution [4])
                {
                    m_probleme = new Probleme;
                    m_proposition [4] = proposition [4];
                    m_solution [4] = solution [4];
                }
                ~Exercice()
                {
                    delete m_probleme;            
                }
    };
    #endif
    Merci

  9. #9
    Membre régulier Avatar de Nono Sto
    Profil pro
    Inscrit en
    mars 2009
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2009
    Messages : 350
    Points : 74
    Points
    74
    Par défaut
    Cheres amies amis du forum

    j'ai repris ma classe Exercice, et j'ai besoin d'intancier des tableuax.
    Pour cela j'utilise la classe vector, cependant je n'arrive pas instancier mes deux vecteur dans le constructeurs

    Pourriez vous m'aider SVP

    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
    #include "Probleme.h"
     
    template <Probleme *probleme, class Type1,class Type2> 
    class Exercice
    {
        private:
                Probleme *m_probleme = NULL;
                vector <Type1> m_proposition;
                vector <Type2> m_solution;
        public:
                /*Exercice()
                {
                    m_probleme = new Probleme;
                    <Type1> m_proposition(4);
                    <Type2> m_solution(4);
                }*/
                Exercice(Probleme *probleme,Type1 proposition(4),Type2 solution(4))
                {
                    m_probleme = new Probleme;
                    <Type1> m_proposition(4);
                    <Type2> m_solution(4);
                }
                ~Exercice()
                {
                    delete m_probleme;            
                }
    };
    #endif

  10. #10
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    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
    #include "Probleme.h"
     
    template <Probleme *probleme, class Type1,class Type2> 
    class Exercice
    {
        private:
                Probleme *m_probleme;
                vector <Type1> m_proposition;
                vector <Type2> m_solution;
        public:
     
                Exercice(Probleme *probleme)
       : m_probleme(NULL),m_proposition(4), m_solution(4)
                {
                    m_probleme = new Probleme;
                }
                ~Exercice()
                {
                    delete m_probleme;            
                }
    };
    #endif
    je t'enjoindrasi à lire un cours de base de C++, il te manque qqs notions de base

  11. #11
    Membre régulier Avatar de Nono Sto
    Profil pro
    Inscrit en
    mars 2009
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2009
    Messages : 350
    Points : 74
    Points
    74
    Par défaut
    Merci beaucoup

  12. #12
    Membre régulier Avatar de Nono Sto
    Profil pro
    Inscrit en
    mars 2009
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2009
    Messages : 350
    Points : 74
    Points
    74
    Par défaut
    J'ai essayé de lancer mon main mais je ne connais pas la syntaxe adéquate pour instancier une classe template composé à la fois d'un type "fixe" ici de classe Probleme et deux "type non fixe".

    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
    #include <time.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <iostream>
     
    #include "Probleme.h"
    #include "Exercice.h"
     
    void main()
    {
        int a = 0;
        int b = 0;
     
        int tab1 [4]={0};
        int tab2 [4]={0};
     
        Probleme <int,int> test(a,b);
        Exercice <*probleme ,int, int> Exo(*test);
    }

  13. #13
    Membre régulier Avatar de Nono Sto
    Profil pro
    Inscrit en
    mars 2009
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2009
    Messages : 350
    Points : 74
    Points
    74
    Par défaut
    on m'a aide à réercrir mon code et cela donne ceci

    probleme.h
    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
    #ifndef ProblemeH
    #define ProblemeH
     
    #include <ctime>
    #include <vector>
    #include <math.h>
    #include <cstdlib>
    #include <string.h>
    #include <iostream>
     
    template <class Type1,class Type2>
    class Probleme
    {
        private:
            typedef Type1 type_1;
            typedef Type2 type_2;
     
            type_2 m_operande_1;
            type_2 m_operande_2;
     
        public :
            Probleme() : m_operande_1(), m_operande_2()
                {
                }
     
            Probleme(type_1 operande_1, type_2 operande_2) : m_operande_1(operande_1), m_operande_2(operande_2)
                {
                }
     
            ~Probleme()
                {
                }
    };
    #endif
    Exercice
    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
     
    #ifndef ExerciceH
    #define ExerciceH
     
    #include "Probleme.h"
     
    template <class Type1,class Type2>
    class Exercice
    {
        private :
            typedef Type1 type_1;
            typedef Type2 type_2;
     
            Probleme<type_1, type_2> *m_probleme;
            std::vector<type_1> m_proposition;
            std::vector<type_2> m_solution;
     
        public :
            Exercice(): m_probleme(new Probleme<type_1, type_2>),m_proposition(4), m_solution(4)
    			{
    			}
     
    		Exercice(const Probleme<type_1, type_2>& probleme): m_probleme(& probleme),m_proposition(4), m_solution(4)
    			{
    			}
     
            ~Exercice()
    			{
    				delete m_probleme;
    			}
    };
    #endif
    mais je n'arrive pas instancier un objet Exercice dans mon main.
    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
    #include <time.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <iostream>
     
    #include "Probleme.h"
    #include "Exercice.h"
     
    int main()
    {
        int a = 1;
        int b = 2;
        double c = 3;
     
        Probleme <int,int> test(a,b);
        Exercice <int, int> Exo(&test);
     
        return 0;
    }
    Pourriez vous me donner la bonne syntaxe SVP.

    Merci

  14. #14
    Membre actif
    Étudiant
    Inscrit en
    octobre 2007
    Messages
    189
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2007
    Messages : 189
    Points : 211
    Points
    211
    Par défaut
    Des includes entre <> que tu fais, aucune n'est utile. De plus tu mélanges les includes du C et celles du C++.

    -> <ctime> c'est du C++, <time.h> du C. Préfère ceux du C++ en C++.
    -> <string.h> devient <cstring> mais préfère les std::string de <string>.
    -> n'inclus que le strict minimum.

    Tu devrais revoir la théorie sur les pointeurs et les références, c'est exactement ça ton problème (à la lecture du code à froid). & signifie deux choses différentes, tout dépend du contexte. Je te laisse revoir la théorie, je suis un peu trop paresseux là pour la recopier.

    Fait gaffe aussi que tes pointeurs soient valides.

    Et soigne ton indentation! Ça fait mal à voir...

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

Discussions similaires

  1. heritage des contraintes
    Par krimson dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 30/04/2004, 12h04
  2. [Kylix] heritage multiple et interfaces :(
    Par le_barbu dans le forum EDI
    Réponses: 4
    Dernier message: 26/01/2004, 19h30
  3. [Postgres] Pb d'heritage...
    Par anonia dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 23/08/2003, 22h34
  4. [HERITAGE] Redondance ou pas redondance ???
    Par cyrillus76 dans le forum Schéma
    Réponses: 1
    Dernier message: 11/06/2003, 09h46
  5. [PostgreSQL] Question vis a vis de l'heritage...
    Par Gandalf dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 12/05/2003, 16h53

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