Dans une bibliothéque j'ai une classe A dont dérrive des classe A1, A2, A3, A4,....
dans une autre classe B j'ai des pointeurs sur A1, A2, A3, A4, ...
C'est pointeurs sont initialisés hors de ma bibliothèque par les l'utilisateurs de ma bibliothèque.
Souvent ils les initialisent par des classes A1', A2', A3', A4',... qui dérivent respectivement de A1, A2, A3, A4, ....
Par contre ils initialisent que les celles qu'ils utilisent. Donc dans ma classe B je me retouve avec des pointeurs nuls. Or quand j'en ai besoin mon programe crash. Il faut donc que je definisse une classe A0 qui ai un comportement par défaut.
Or problème comment faire cela proprement ?
Une autre donnée données importantes c'est que mes pointeurs A1, A2, A3, A4, ... sont des données public (pas très POO tout ça) et que je ne peut pas me permettre le moindre impact sur les appli clientes (une soixantaines environ).
solution 1: A0 dérive de A et dans ma classe B je ne met que des pointeurs sur A, au lieu de pointeurs sur A1, A2, A3, A4,... et je définie quelques part un pointeur sur A0 et créer un A0 et j'affecte tous les pointeurs A1, A2 , A3, A4,... sur mon A0. Le problème de cette solution c'est que après les utilisateur peuvent m'initialiser un pointeur de A2 avec une instance de A2, ce que je ne veut pas.
solution 2: je créer des classes A01, A02, A03, A04, .... Ces classes dérivant de A1, A2, A3, A4,.... Je laisse mes pointeurs dans B sur des A1, A2, A3, A4 et je les initialises avec des instance de A01, A02, A03, A04,...
Le problème de cette solution est que les A0x auront toutes le même comportement, mais je serait tout de même obligé de les implémenter toute. En plus il faut que je garde des pointeurs sur les A0x car si les utilisateurs les écrases il faut que je les libère tout de même en fin de prog.
solution 3: ici votre solution.![]()
Partager