Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 07/03/2007, à 04:21

Stephanie

[Résolu][C++]Problèmes appels de méthodes

Hello,

j'ai écrit une classe (je ne met pas tout le code car trop long) :


Est-ce que quelqu'un pourrait m'indiquer ce que je dois faire pour que mon code fonctionne dans le main.

Merci

Dernière modification par Stephanie (Le 08/03/2007, à 12:35)

Hors ligne

#2 Le 07/03/2007, à 04:46

slapierre

Re : [Résolu][C++]Problèmes appels de méthodes

As-tu testé l'affichage d'un objet venant d'être créé? Il est essentiel de s'assurer de la  "stabilité" de ton objet et des méthodes de ta classe. A cet effet teste chaque méthode avec un petit programme AVANT de résoudre ton algorithme.

Il faudrait voir la définition de ta classe! Pour l'instant je suggère la modification suivante :

Surcharge de l'opérateur d'affichage et non un foo.affiche()

>> Dans mon fichier d'entête (j'affiche une fraction) :     

    friend std::ostream & operator << (std::ostream &outs, const fraction & s);

>> Dans mon fichier CPP, je concatène mes infos à la chaine de sortie (outs)

std::ostream & operator << (std::ostream & outs, const fraction & f)
{
    return outs << f.r << " = " << f.e << "+ (" << f.n << "/" << f.d << ")";

}

Simon.


"Le spectre de la folie nous empêchera-t-il de hisser l'étendard de l'imagination?" - André Breton

Hors ligne

#3 Le 07/03/2007, à 04:55

slapierre

Re : [Résolu][C++]Problèmes appels de méthodes

Aussi, tu dois t'assurer d'utiliser les mots clefs "public" et "private", par défaut, je crois que tout est "private"!

Tes méthodes doivent être publiques et tes attributs doivent être privées.

Voici ma définition de ma classe fraction (une ébauche -- la liste des services fournis
est incomplète), elle offre cependant les 5 services essentiels suivants :

1 - Constructeur de copie
2 - Surcharge de l'opérateur de copie
3,4 - Mutateurs et scrutateurs de base (get et set)
5 - Opérateur d'affichage

-- ils sont essentiels car tout programmeur C++ s'attend à ce qu'ils soient fournis et permettent de créer rapidement un programme de test --

class fraction
{

 public:

// Constructeurs :

    fraction(void);						// Constructeur vide
    fraction(const FLOAT64 r);					// à base d'un nombre réel
    fraction(const INT32 e, const INT32 n, const INT32 d);	// À base d'entiers (f = e + n / d)
    fraction(const fraction & r);				// Constructeur de copie

// Destructeur :

    ~fraction();

// Inspecteurs :

    FLOAT64 get_fraction(void) { return r; }

// Mutateurs :

    void inline set_fraction(const FLOAT64 r) { this->r = r; r_2_f(); }
    void inline set_fraction(const INT32 e, const INT32 n, const INT32 d) { this->e = e; this->n = n; this->d = d; f_2_r(); }

// Surcharge des opérateurs :

    friend std::ostream & operator << (std::ostream &outs, const fraction & s);rac
    fraction & operator = (const fraction & right) throw ();

 private:

// Méthodes privées :

    // Obtenir un nombre réel à partir d'une fraction
    void f_2_r (void) { r = (static_cast<FLOAT64>(e) + (static_cast<FLOAT64>(n) / static_cast<FLOAT64>(d)));}

    // Calculer la fraction à partir d'un nombre réel
    void r_2_f (void);

// Attributs : 

    FLOAT64 r;   	// Fraction de type f = e + n / d
    INT32  e; 		// Partie entière
    INT32  n;		// Numérateur 
    INT32  d;		// Dénominateur 

};

"Le spectre de la folie nous empêchera-t-il de hisser l'étendard de l'imagination?" - André Breton

Hors ligne

#4 Le 07/03/2007, à 15:33

Luc Hermitte

Re : [Résolu][C++]Problèmes appels de méthodes

Destructeur, constructeur de copie et opérateur d'affectation n'ont pas besoin d'être explicités dans une classe comme celle-ci (NombreRationnel) (elle est sensé avoir une sémantique de valeur, et je ne vois pas de quelles ressources elle pourrait être responsable => ce qui est généré par défaut est très bien)

Je ne vois pas non plus l'intérêt des mutateurs ici, il n'apportent rien. Les accesseurs éventuellement pour réaliser des affichages. Cf la définition de std::complex (http://dinkumware.com/manuals/?manual=compleat&page=complex.html#complex) pour des signatures type.
Au fait, les spécifications d'exception sont des attrape-couillons.


Pour en revenir à la question initiale
-> Il existe des forums spécialisés dans le C++ plus en thême que celui-ci (developpez, fclc++, ...)
-> Ta classe vacance, ses membres sont des copies, ou des références des glaciers initiaux ?