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 :

deux objets d'une même classe peuvent elles avoir des méthodes differentes ?


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    12
    Inscrit en
    Mai 2014
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : 12
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 67
    Points : 61
    Points
    61
    Par défaut deux objets d'une même classe peuvent elles avoir des méthodes differentes ?
    salut, Alors ma question est claire : deux objets d'une même classe peuvent elles avoir des méthodes différentes ?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 127
    Points : 33 038
    Points
    33 038
    Billets dans le blog
    4
    Par défaut
    kamoulox ?

    Un objet c'est une instance d'une classe.
    Une classe, ça a des méthodes et variables membres clairement définies. A la compilation.
    Donc par quelle magie espères-tu parvenir à ce que tu dis ? Ou bien tu as une toute autre idée en tête et t'exprimes mal.

    Sinon, tu peux avoir un pointeur de méthode en attribut, mais je doute que ce soit ce dont tu parles.

  3. #3
    Membre du Club
    Homme Profil pro
    12
    Inscrit en
    Mai 2014
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : 12
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 67
    Points : 61
    Points
    61
    Par défaut
    c'était une question posée dans un Devoir surveillé sur 2.5 points! et c'est pour cela que je l'ai trouvée bizzar

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 659
    Points : 10 641
    Points
    10 641
    Par défaut
    Puisque la question est "bizarre", alors je vais répondre par une réponse "bizarre" oui c'est possible.
    ... Du moins sur le papier après à tester en vrai


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class Weird {
    #ifdef CLASS_PART_1
     
    // ... Stuff here
     
    #endif // CLASS_PART_1
     
    #ifdef CLASS_PART_2
     
    // ... Stuff here
     
    #endif // CLASS_PART_2
    };

    Et ensuite dans le code, on l'utilise comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #define CLASS_PART_1 1
    Weird weird_object;
    #undef CLASS_PART_1

    MAIS pour que cela fonctionne, je pense qu'il faut définir seulement un seul morceau dans une unité de compilation (fichier cpp + tous les include).

  5. #5
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 195
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 195
    Points : 17 162
    Points
    17 162
    Par défaut
    Et encore, techniquement, tu auras deux classes de même nom, en conflit potentiel.

    Une réponse potentiellement valable serait la suivante:
    une référence ou un pointeur peut désigner des objets polymorphiques.
    Ces objets peuvent avoir des fonctions distinctes (si elles sont virtuelles), mais ne sont en fait pas du même type réel.

    Si un objet est d'un type donné, il a les fonctions de ce type. Le manipuler via une référence d'un de ses types parents ne change rien à cela.

    Pour faire court, non doit suffire à ouvrir un débat lors de la correction.
    Le type de la variable n'est pas toujours strictement le type de l'objet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    B truc;
    A& variable = truc; //qui n'est valable que si B hérite publiquement de A, directement ou non
    variable.une_fonction();
    Le type de l'expression variable est référence sur A, le type de la valeur de cette expression est B.
    La conséquence, c'est que tu ne peux appeler une_fonction() que si elle est définie dans A, mais si elle est virtuelle, c'est celle définie dans B qui sera appelée.

  6. #6
    En attente de confirmation mail

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Points : 3 311
    Points
    3 311
    Par défaut
    Citation Envoyé par foetus Voir le message
    Puisque la question est "bizarre", alors je vais répondre par une réponse "bizarre" oui c'est possible.
    ... Du moins sur le papier après à tester en vrai


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class Weird {
    #ifdef CLASS_PART_1
     
    // ... Stuff here
     
    #endif // CLASS_PART_1
     
    #ifdef CLASS_PART_2
     
    // ... Stuff here
     
    #endif // CLASS_PART_2
    };

    Et ensuite dans le code, on l'utilise comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #define CLASS_PART_1 1
    Weird weird_object;
    #undef CLASS_PART_1

    MAIS pour que cela fonctionne, je pense qu'il faut définir seulement un seul morceau dans une unité de compilation (fichier cpp + tous les include).
    En faite non, ca ne peut jamais marcher, c'est un UB. L'ODR autorise à définir plusieurs fois un même symbole dans le programme (mais toujours une seule fois pas unité de compilation) mais il impose aussi que ces définitions soient strictement identiques : même suites de symboles et même signification de chaque symbole (la règle est plus détaillé que ça, mais l'idée est là).

    @OP: La réponse est non, deux objets du même type supportent les mêmes appels.

Discussions similaires

  1. Réponses: 3
    Dernier message: 22/04/2013, 12h07
  2. Réponses: 2
    Dernier message: 13/04/2010, 12h45
  3. Réponses: 5
    Dernier message: 30/01/2007, 13h23
  4. [POO] Deux constructeurs pour une même classe
    Par amika dans le forum Langage
    Réponses: 4
    Dernier message: 16/12/2006, 16h31
  5. Réponses: 15
    Dernier message: 19/06/2006, 19h25

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