Une fonction avec des valeurs par défaut est-elle une fonction surchargée ?
Non. Les surcharges ressemblent
Fraction();
Fraction(int numerator);
Fraction(int numerator, int denominator);
et ont chacune leur propre implémentation (définition), tandis qu'une fonction avec des paramètres par défaut a une seule implémentation.
Je pensais qu'il n'y en avait qu'un, mais ils ont suggéré qu'il y en avait 3 : ...
"Combien de constructeurs a la classe Fraction ?"
C'est une question piège, conçue pour vous tromper en vous montrant les variantes d'appel disponibles pour une Constructeur unique déclaration.
El définitif La réponse pour l'extrait de code donné est 3 (en mots trois ).
Il y a un constructeur spécialisé (qui sert trois variantes d'appel), et le compilateur génère automatiquement un constructeur de copie et de déplacement si vous ne faites pas de delete
ou fournir une implémentation personnalisée :
Fraction(int numerator = 0, int denominator = 1); // (1)
// Redundant, just for demonstration:
Fraction(const Fraction& rhs) = default; // (2)
Fraction(Fraction&& rhs) = default; // (3)
Donc pour cet examen, si vous répondez
La classe a un constructeur
C'est faux de toute façon. Si vous répondez
La classe a trois constructeurs (comme vous l'avez écrit, c'est la réponse acceptée).
vous devrez expliquer en profondeur pourquoi vous le pensez (comme expliqué ci-dessus).
Dans n'importe quel examen oral, je vous demanderais de justifier pourquoi exactement, ce que je ferais aussi dans un test d'apprentissage.