Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

incomprehension

2 réponses
Avatar
eric
bonjour,

j ai un petit gaga que je comprend pas bien.
J ai créé une classe du type :
class Noeud {
...
vector<Noeud*> fils_
...
vector<Noeud*> getFils() { return fils_;}
}

je me construit un petit arbre, dont le noeud racine est la racine et je
veux le voir. je met NULL comme premeir pointeur si pas de fils

si j'ecris:

cout << ((racine.getFils()[0])->getFils()[0])->getFils()[0]
J'obtiens le NULL que je cherche, tout est normal.

Mais si j ecris :

ptr=&racine;
ptr = ptr->getFils()[0];
ptr = ptr->getFils()[0];
ptr = ptr->getFils()[0]; (je devrais etre au memme niveau que dans l
expression precedente il me semble)
et cout << ptr;
j obtiens pas NULL, or je devrais bien obtenir la meme chose que
precedement non ?

bonnes fetes a tous !

@+

2 réponses

Avatar
Sylvain Togni

si j'ecris:

cout << ((racine.getFils()[0])->getFils()[0])->getFils()[0]
J'obtiens le NULL que je cherche, tout est normal.

Mais si j ecris :

ptr=&racine;
ptr = ptr->getFils()[0];
ptr = ptr->getFils()[0];
ptr = ptr->getFils()[0]; (je devrais etre au memme niveau que dans l
expression precedente il me semble)
et cout << ptr;
j obtiens pas NULL, or je devrais bien obtenir la meme chose que
precedement non ?


Les deux écritures sont équivalentes, elles contiennent trois
appels à getFils()[0] en cascade.

L'erreur doit-être ailleurs. Est-tu sûr que tous les noeuds
contiennent au moins un fils (même NULL) ? Le constructeur de
copie et l'opérateur d'affectation de la classe noeud sont-ils
bien définis (copie profonde ou déclarés private) ?

D'ailleurs, pourquoi utiliser un fils NULL ? Une feuille
pourrait être tout simple un noeud sans fils. Aussi, si les
noeuds ne sont pas polymorphes, j'utiliserai un vector<Noeud>
plutôt qu'un vector<Noeud*>.

--
Sylvain Togni

Avatar
eric
bonjour

merci de ta réponse

L'erreur doit-être ailleurs. Est-tu sûr que tous les noeuds
contiennent au moins un fils (même NULL) ?


err a vue de nez, je pense que le problème était là...
j'ai rajouté un ajout de fils NULL et cela fonctionne ...

D'ailleurs, pourquoi utiliser un fils NULL ? Une feuille
pourrait être tout simple un noeud sans fils.


je pensais que cela serait plus ismple pour les test... (style tant que
pas NULL ...)

Aussi, si les
noeuds ne sont pas polymorphes, j'utiliserai un vector<Noeud>
plutôt qu'un vector<Noeud*>.


oui effectivement, au début, je pensait que les feuilles seraient
différents des noeuds, par la suite la feuille est devenue unnoeud
normal...
De fait il n'y a plus polymorphisme...
Par habitude, dès que j 'utilise de grosses structures, je met un
pointeur ;)