Héritage des constructeurs
L'extrait de code que vous avez fourni :
class A { public: explicit A(int x) {} }; class B: public A { }; int main(void) { B *b = new B(5); delete b; }
produit des erreurs lors de la compilation avec GCC car il manque un constructeur correspondant pour B(int). Bien que vous puissiez vous attendre à ce que B hérite du constructeur de A, ce n'est pas le cas par défaut en C .
Dans C 11 et versions ultérieures, une nouvelle fonctionnalité appelée héritage du constructeur utilisant using a été introduite. En ajoutant using A::A; au sein de la classe B, vous pouvez hériter explicitement de tous les constructeurs de A.
class A { public: explicit A(int x) {} }; class B: public A { using A::A; };
Cependant, l'héritage des constructeurs est un concept tout ou rien. Vous ne pouvez pas hériter de manière sélective uniquement de certains constructeurs. Si vous tentez de le faire, vous devrez définir manuellement les constructeurs souhaités et appeler explicitement le constructeur de base à partir de chacun d'eux.
Dans C 03 et versions antérieures, l'héritage des constructeurs n'était pas pris en charge. Les constructeurs devaient être hérités manuellement en appelant individuellement le constructeur de base dans chaque constructeur de classe dérivée.
Pour les classes de base basées sur un modèle, vous pouvez utiliser la syntaxe du modèle pour hériter de tous les constructeurs. Par exemple :
template<class T> class my_vector : public vector<T> { public: using vector<T>::vector; ///Takes all vector's constructors /* */ };
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!