Une classe C peut-elle se référencer en tant que membre ?
Imaginez un scénario dans lequel vous travaillez sur un programme C et désirez créer une classe qui représente les arbres d'expression. Dans cette classe, vous souhaitez définir des méthodes pour parcourir et évaluer l'arborescence dans l'ordre des suffixes. Cependant, au fur et à mesure que vous approfondissez l'implémentation, vous rencontrez un problème déroutant :
`
<br>class Node {</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">char *cargo; Node left; Node right;
};
Vous réalisez avec consternation que vous êtes incapable de déclarer 'gauche' et 'droite' comme Types de « nœuds ». Cela soulève une question fondamentale : une classe C peut-elle s'inclure en tant que membre ?
Dévoiler les limites
La réponse à cette question est un « non » catégorique. Déclarer les membres comme types « Node » crée une récursivité infinie. Chaque nœud contiendrait deux autres objets Node, qui à leur tour contiendraient deux autres objets Node, à l'infini. Cette définition récursive conduit à un objet de taille infinie, ce qui n'est tout simplement pas réalisable.
Présentation des pointeurs à la rescousse
Bien qu'une classe ne puisse pas se référencer directement en tant que membre , il peut toujours conserver une référence à lui-même via des pointeurs. Voici une version modifiée de votre classe qui résout ce problème :
`
<br>class Node {</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">char *cargo; Node* left; // Pointer to a Node Node* right; // Pointer to a Node
};
`
En utilisant des pointeurs, vous pouvez maintenir une structure arborescente où chaque nœud référence d'autres nœuds de la même classe. Cela vous permet de parcourir et d'évaluer efficacement l'arbre d'expression sans rencontrer de récursion infinie.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!