Ok - personnellement je n’ai jamais vu ce terme dans la littérature. On parle souvent de constructeur implicite.
Je vais essayer de le dire autrement
Un constructeur par défaut est effectivement un constructeur sans paramètres. Cependant, il est “par défaut” uniquement lorsqu’il est généré automatiquement par le compilateur si aucun autre constructeur n’est défini. On le dit alors aussi implicite.
Mais si vous définissez explicitement un constructeur sans paramètres, il sera aussi un constructeur par défaut (mais explicite).
Le terme Constructeur de transtypage n’existe pas dans la norme en C++, on parle de constructeur de conversion . Vous semblez faire référence aux constructeurs avec un seul paramètre, qui permettent de convertir un type de données en une instance de la classe, et peuvent donc être utilisés pour la “transtypage” implicite ou explicite (conversion de type). Toutefois, cela n’est pas une terminologie standard.
Je dirais que
-
Le constructeur par défaut ou impicite est un constructeur sans paramètres, et il est généré automatiquement par le compilateur si aucun constructeur n’est défini explicitement.
-
Un constructeur avec paramètres permet d’initialiser un objet avec des valeurs spécifiques et peut être utilisé pour des conversions implicites (si le mot-clé explicit n’est pas utilisé).
L mot-clé explicit est utilisé devant un constructeur pour empêcher les conversions implicites non désirées entre types. Lorsque vous définissez un constructeur qui prend un paramètre, il peut être utilisé pour convertir implicitement un objet d’un autre type en un objet de votre classe. Le mot-clé explicit empêche cette conversion automatique, ne permettant l’initialisation qu’à travers une conversion explicite (par exemple, avec un appel direct au constructeur).
Exemple sans explicit :
class MaClasse {
public:
MaClasse(int x) {}
};
MaClasse obj = 5; // Conversion implicite de l'entier 5 en MaClasse
Dans cet exemple, l’entier 5 est automatiquement converti en un objet de type MaClasse grâce au constructeur qui prend un paramètre int.
Exemple avec explicit :
class MaClasse {
public:
explicit MaClasse(int x) {}
};
MaClasse obj = 5; // Erreur de compilation
Ici, l’utilisation du mot-clé explicit empêche cette conversion implicite. Pour créer l’objet, vous devez appeler explicitement le constructeur :
MaClasse obj(5); // Correct
Cela permet de mieux contrôler la manière dont les objets sont créés et évite des erreurs involontaires liées aux conversions implicites de types.
Ça date de C++98 et ça a été étendu avec C++11 que nous utilisons avec Arduino