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 :

Classe à l'intérieur d'une classe ?


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 29
    Points : 19
    Points
    19
    Par défaut Classe à l'intérieur d'une classe ?
    Bonjour,
    je suis débutante en c++, je dois compléter un programme et j'ai besoin de votre aide

    J'ai une classe CC qui a deux attributs x et y, et j'ai besoin de définir le type ou plutot la classe (je ne sais pas) Borne tel que, la ligne suivant:

    const CC::Borne precision=(CC::Bonne) 1E-12;

    (d'après ce que j'ai compris renvoie une instance de CC (qui est précision ?) , les attributs de cet instance sont égeaux respectivement à

    (x - x* 1E-12) et (y+ y* 1E-12)

    J'attends vos réponses, c'est urgent SVP
    Merci

  2. #2
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Tu dois surcharger l'opérateur + pour la classe Bonne (CC::Bonne).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class Bonne
    {
        ...
     
        Bonne operator + (double a)
        {
            Bonne b;
            b.x = x - x * a;
            b.y = y + y * a;
            return b;
        }
     
        ...
    };
    EDIT : Tiens, c'est l'opérateur de transtypage (cast de double vers Bonne) que tu veux surcharger on dirait. Vu ta formule, c'est mal pensé. L'opérateur + convient mieux. Mais bon, le principe ça reste toujours le même.

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Je dirais plutôt un truc de ce genre:
    Code C++ : 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
    class Bonne
    {
    	...
     
    	Bonne& operator +=(double a)
    	{
    		x -= (x * a); // Ou bien x *= (1-a);
    		y += (y * a); // Ou bien y *= (1+a);
    		return *this;
    	}
     
    	...
    };
     
    Bonne operator+ (Bonne const &obj, double a)
    {
    	Bonne b(obj);
    	b += a;
    	return b;
    }
     
    Bonne operator+ (double a, Bonne const &obj)
    { return obj + a; }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 29
    Points : 19
    Points
    19
    Par défaut
    Bonjour,
    Merci pour vos réponse.
    Au fait ce n'est pas ça que je veux vraiment

    voici le code

    Intervalle sqrt (const Intervalle &x){
    const Intervalle::Borne precision=(Inetrvalle::Bonne) 1E-12; ///////CETTE LIGNE
    Intervalle a=x;

    while(fabs(a*a-x)>precision //LIGNE X
    a=(a+x/a)/2;
    return a;
    }
    Sachant que Intervalle est une classe qui a deux attiributs.
    Ici je pense qu'on cherche à surcharger la fonction sqrt pour l'appliquer sur un intervalle, et je moi je dois définir Borne et surcharger fabs (je l'ai déja fait) mais je n'arrive pas à très bien comprendre la ligne où j'ai mis un commentaire, pourriez vous m'expliquer ce qu'elle veut dire SVP ? je pense que cette ligne renvoie un Intervalle [- 1E-12, 1E-12]

    D'après la LIGNE X précision est un intervalle, mais précision = 1E-12 ????

    Je ne comprends plurien aidez moi svp

  5. #5
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Peu importe. L'essentiel c'est que tu apprennes à surcharger les opérateurs. Le C++ ne sait pas comment comparer une "Borne" (precision) avec un "double" (fabs(a*a-x)), comme dans "LIGNE X", ni que faire lorsqu'on demande d'affecter un "double" (1E-12) vers "Borne" (precision), comme dans "CETTE LIGNE" (et inutile de faire un cast dans ce cas). C'est à toi de le dire, en surchargeant respectivement les opérateurs > et =.

  6. #6
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 29
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par Melem Voir le message
    Peu importe. L'essentiel c'est que tu apprennes à surcharger les opérateurs. Le C++ ne sait pas comment comparer une "Borne" (precision) avec un "double" (fabs(a*a-x)), comme dans "LIGNE X", ni que faire lorsqu'on demande d'affecter un "double" (1E-12) vers "Borne" (precision), comme dans "CETTE LIGNE" (et inutile de faire un cast dans ce cas). C'est à toi de le dire, en surchargeant respectivement les opérateurs > et =.
    Merci,
    Au fait les opérateur +, -, *,= .... sont déja surchargés dans la classe Intervalle

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    S'il sont surchargés dans Intervalle et pas dans Borne, tu ne peux pas faire Borne = un double.

    Par contre, tu peux avoir un constructeur de Borne (explicit ou non) qui prend un double en paramètre...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 29
    Points : 19
    Points
    19
    Par défaut
    je n'arrive plus à creer la classe Borne à l'intérieur d'une autre classe, coment l faire? où la définir où la déclarer ? et comment? Merci

    Sinon pour simplifier comment peut on définir un type à l'interieur d'une classe ?

  9. #9
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Bien sûr.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class AA
    {
        ...
    public:
        ...
        class BB
        {
            ...
        };
        ...
    };
    Puis :

  10. #10
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 29
    Points : 19
    Points
    19
    Par défaut
    Merci pour vos réponses. Finalement j'ai crée un type à l'interieur de la classe, au lieu d'une classe. Mais là j'ai un autre problème dans ma fonction

    Intervalle sqrt(const Intervalle &x) {
    const Intervalle::Borne precision=(Intervalle::Borne) 1E-12;
    Intervalle a=x;
    while(fabs(a*a-x)>precision)
    a = (a+x/a)/2; // LIGNE X
    return a;
    Quand je compile il m'affiche à la ligne x cette erreur

    passing ‘const Intervalle’ as ‘this’ argument of ‘Intervalle Intervalle::operator/(const Intervalle&)’ discards qualifiers
    sachant que j'ai déja surchargé les opérateurs *, + ,et / deux fois
    Intervalle operator/ (const Intervalle &);
    Intervalle operator/ (const int &x);
    J'attends vos réponses
    Merci

  11. #11
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Intervalle operator/ (const Intervalle &) const;
    Intervalle operator/ (const int &x) const;
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  12. #12
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 29
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Intervalle operator/ (const Intervalle &) const;
    Intervalle operator/ (const int &x) const;
    Merci ça marche
    Pourriez-vous m'expliquer à quoi sert ce const à la fin et pourquoi ça ne marchait pas sans ?
    Merci

  13. #13
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Le const à la fin d'une fonction membre indique que cette fonction ne modifie pas l'objet. Dans le corps d'une telle fonction, this est const, et les variables membres sont considérées const aussi.
    Sur un objet const (ou référencé par un pointeur const), seules les méthodes const peuvent être appelées.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Exécuter une classe à l'intérieur d'une autre classe
    Par messi1987 dans le forum Débuter avec Java
    Réponses: 8
    Dernier message: 14/01/2014, 08h16
  2. Réponses: 6
    Dernier message: 14/12/2008, 02h12
  3. Réponses: 4
    Dernier message: 06/04/2008, 18h34
  4. Héritage d'une classe MFC et d'une classe non MFC
    Par Etienne Paquette dans le forum MFC
    Réponses: 7
    Dernier message: 04/12/2007, 20h19
  5. Réponses: 14
    Dernier message: 15/12/2005, 18h46

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