#1 Le 07/03/2007, à 03: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, à 11:35)
Hors ligne
#2 Le 07/03/2007, à 03: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, à 03: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, à 14: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 ?