Question sur la fonction init()

Bonsoir à toutes et à tous,

Il y a quelques temps j'ai écrit une classe d'affichage de courbes que je souhaite modifier. Elle comporte un constructeur, une fonction init() et d'autres fonctions. Avant que de me lancer dans des modifs, je relis ce que j'avais écrit et je m'aperçois qu'à l'utilisation de cette classe, je n'appelle jamais la fonction init() et pourtant, les variables qu'elle contient sont eux bien initialisées. J'en veux pour preuve que, si je supprime l'initialisation de ces variables dans la fonction init(), mon programme plante.

Ma conclusion est que cette méthode init() est implicitement appelée. C'est ce que je devais savoir au moment où j'ai écrit cette classe.

Pour autant, je n'arrive pas à trouver de documentation sur ce fait.

Pouvez-vous me confirmer cet appel implicite et me donner un lien documentant cela ?

Merci pour vos renseignements.

Pierre

Bonjour,

Non la fonction init() n'est pas implicitement appelée. Seuls sont implicitement appelés le constructeur et le destructeur.
Peut être que tu appelles init() dans le constructeur.

que je sache en C++ il n'y a pas d'appel implicite à une fonction autre que le constructeur (à moins d'une bizarrerie avec les nouvelles normes C++).
Si ta fonction init() est appelée c'est qu'elle est appelée quelque part... Soit dans ta classe (depuis le constructeur par exemple), soit par l'appelant, soit, si c'est une classe héritée, c'est une fonction appelée par le constructeur de la classe mère. Dans ce dernier cas tout dépend de comment est codée la classe mère...

Vous avez raison, cela me paraissait aussi vraiment bizarre ! Effectivement, cette fonction init() est bien appelée quelque part, mais je ne me souvenais plus où, c'est dans cette fonction qui initialise tous les classes (ce sont des composants visuels) que j'utilise dans une application (voir la cinquième ligne :

void installeComp(int noA) {
  PtrComp * compAct = compDeb;
  for (int i = 0; i < nbComp; i++) { // effaçage et affichage automatique des composants visuels au changement d'onglet
    if (creation)
      compAct->ptrB->init(); // initialise les composants pendant le setup
    if (compAct->ptrB->page == noA || compAct->ptrB->page == 0xFF) { // 0xFF -> composant visible/actif sur toutes les pages
      compAct->ptrB->actif = true;
      compAct->ptrB->affiche(); // ... et affiche ceux de l'onglet sélectionné
    }
    else {
      compAct->ptrB->actif = false;
    }
    compAct = compAct->suiv;
  }
}

Merci de m'avoir rafraichi la mémoire.

Cordialement.

Pierre