Maison > développement back-end > C++ > Comment puis-je hériter de constructeurs en C ?

Comment puis-je hériter de constructeurs en C ?

Linda Hamilton
Libérer: 2024-12-25 15:30:10
original
605 Les gens l'ont consulté

How Can I Inherit Constructors in C  ?

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;
}
Copier après la connexion

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;
};
Copier après la connexion

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
    /* */
};
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal