Voici le code en question! Je n'ai pas passé trop de temps avec C ++ et j'implémente un arbre de recherche binaire.

void BST::Preorder(void(*visit)(const Node *))

Plus tard, la fonction est appelée comme ceci:

bst.Preorder(PrintNode)

Avec PrintNode étant implémenté comme suit:

void PrintNode(const Node* n)
{
    cout << n->GetValue() << ",";
}

On m'a demandé d'implémenter cette fonction de précommande - mais je suis très confus quant à ce qui se passe ici. Quelqu'un peut-il s'il vous plaît me diriger dans la bonne direction. Je vous remercie.

0
motantan 9 mai 2020 à 09:02

3 réponses

void BST::Preorder(void(*visit)(const Node *))
  • C'est la fonction Preorder de la classe BST.
  • Le paramètre de cette fonction est un pointeur de fonction.
  • *visit signifie que c'est un pointeur de fonction qui accepte un const Node * comme son propre paramètre et renvoie void.

Donc, généralement, vous devrez implémenter cette fonction visit ailleurs. Utilise ensuite cette fonction visit quelque part dans la fonction Preorder.

0
artm 9 mai 2020 à 06:07

Donc Preorder est une fonction qui va parcourir tous les nœuds de l'arbre de recherche binaire (dans un ordre particulier) et faire quelque chose à chaque nœud. Il est donc utile d'écrire Preorder de telle manière que l'appelant de Preorder puisse spécifier ce qui doit être fait à chaque nœud. C'est le but du paramètre visit. C'est une fonction (en fait un pointeur de fonction) que Preorder devrait appeler à chaque nœud qu'il visite. Dans l'exemple qui vous a été donné, chaque nœud va être imprimé, mais en fournissant une fonction différente comme paramètre à Preorder, vous pourriez lui faire faire quelque chose de différent.

0
john 9 mai 2020 à 06:13

Ceci est un paramètre de type pointeur vers la fonction acceptant const Node * et renvoie void et le nom du paramètre est visit.

En d'autres termes, si vous avez une fonction comme func(), vous pouvez la transmettre à BST::Preorder()

void func(const Node * )
{
    //do something
}
2
asmmo 9 mai 2020 à 06:06