En C ++ 11, qu'entend-on par héritage du constructeur? Si c'est ce que je pense qu'il est (le constructeur de la classe de base est inclus dans la portée de la classe dérivée), quelles sont ses implications sur mon code? Quelles sont les applications d'une telle fonctionnalité?
Réponse
Trop de publicités?Héritant des Constructeurs signifie simplement que. Une classe dérivée peut implicitement hériter des constructeurs de sa classe de base(es).
La syntaxe est comme suit:
struct B
{
B(int); // normal constructor 1
B(string); // normal constructor 2
};
struct D : B
{
using B::B; // inherit constructors from B
};
Alors maintenant, D a la suite de constructeurs définis implicitement:
D::D(int); // inherited
D::D(string); // inherited
Ds membres sont par défaut construit par ces hérité des constructeurs.
C'est comme si les constructeurs ont été définis comme suit:
D::D(int x) : B(x) {}
D::D(string s) : B(s) {}
La fonctionnalité n'est pas quelque chose de spécial. C'est juste une abréviation pour épargner de la saisie du code réutilisable.
Voici les détails techniques:
12.9 Hériter Des Constructeurs
1) Un aide-déclaration que le nom d'un constructeur déclare implicitement un ensemble d'hériter des constructeurs. Le candidat de l'ensemble de l'héritage les constructeurs de la classe X est nommée dans l'aide-déclaration se compose de réelles constructeurs et théorique des constructeurs qui sont le résultat de la la transformation de la souffrance paramètres comme suit:
- tous les non-modèle constructeurs de X, et
- pour chaque modèle, le constructeur de X qui a au moins un paramètre avec un argument par défaut, l'ensemble des constructeurs les résultats de l'exclusion d'un bouton de sélection de paramètre de spécification et de successivement en omettant les paramètres avec un argument par défaut à partir de la fin le paramètre de type de liste, et
- tous les constructeur modèles de X, et
- pour chaque constructeur modèle de X qui a au moins un paramètre avec un argument par défaut, l'ensemble du constructeur modèles de résultats de l'exclusion d'un bouton de sélection de paramètre de spécification et de successivement en omettant de paramètres avec un argument par défaut à partir de la fin de la paramètre de type liste