Bonjour,
Je m’amuse à implémenter une petite classe Fraction
en C++17. Pour le moment j’ai fait toutes les opérations possibles entre deux instances de cette classe. Sans trop faire attention j’ai rentré ça pour essayer mon implémentation :
std::cout << f * Fraction{-3, 7} + 5 << std::endl;
Or je n’ai jamais défini l’opération d’addition entre une fraction et un entier dans ma classe. Mais magie… Ça compile et en plus ça affiche le bon résultat !
Je suppose que la valeur 5
est implicitement convertie en une instance de Fraction
, non ? Voici comment est défini le constructeur :
Fraction(int const numerator = 0, int const denominator = 1);
Mes questions sont :
- Est-ce bien une conversion implicite ?
- Devrais-je définir l’opération entre un entier et une fraction si ça fonctionne très bien comme ça ? Ça permettrai d’éviter d’instancier un objet Fraction.
- Si j’implémente cette opération, comment être sûr que le compilateur utilisera bien celle-ci et non une conversion implicite ?
- Dois-je également définir les opérations habituelles pour les
short
,unsigned
… ? Ou si elles sont définies pour lesint
c’est bon ? Quelles sont les bonnes pratiques à ce niveau là ?
Merci pour vos réponses !
+0
-0