Le code devrai afficher 5 mais ne fait rien, je vois absolument pas pourquoi.
Chez moi, il affiche 5.
Jamais ! Voir:
[ Lien ]
Evite aussi l'utilisation de la commande "system".
ArbreBinaire * arbre = new ArbreBinaire(5);
Non seulement tu ne fais pas de delete après, mais en plus on pourrait tout à fait écrire:
Code C/C++ :
#include <iostream>
int main ()
{
ArbreBinaire arbre(5);
arbre.afficheRacine();
return 0;
}
Le friend est à utiliser avec parcimonie. Ici, il ne sert pas à grand chose. Dans ta classe Racine, tu as ArbreBinaire fg, fd. Ils devraient être des pointeurs.
Bon voici une version un peu plus propre:
Code C/C++ :
#include <iostream>
class ArbreBinaire
{
private:
struct Noeud
{
int _info;
ArbreBinaire* _fg;
ArbreBinaire* _fd;
Noeud(int i)
: _info(i), _fg(0), _fd(0)
{
}
~Noeud()
{
delete _fg;
delete _fd;
}
};
public:
ArbreBinaire();
ArbreBinaire(int i);
~ArbreBinaire();
void affiche() const;
void afficheRacine() const;
private:
Noeud* _racine;
};
ArbreBinaire::ArbreBinaire()
: _racine(0)
{
}
ArbreBinaire::ArbreBinaire(int i)
: _racine(new Noeud(i))
{
}
ArbreBinaire::~ArbreBinaire()
{
delete _racine;
}
void ArbreBinaire::affiche() const
{
if (_racine == 0)
return;
std::cout << _racine->_info << " ";
if (_racine->_fg != 0)
_racine->_fg->affiche();
if (_racine->_fd != 0)
_racine->_fd->affiche();
}
void ArbreBinaire::afficheRacine() const
{
std::cout << _racine->_info
<< " est la racine de l'arbre"
<< std::endl;
}
Code C/C++ :
#include <iostream>
#include "ArbreBinaire.h"
int main ()
{
ArbreBinaire arbre(5);
arbre.afficheRacine();
return 0;
}
A mon sens, on peut se passer de la classe Noeud, tous faire dans la classe ArbreBinaire, et si tu veux masquer certaines opérations, créer un proxy dessus.
_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio