Maison > développement back-end > C++ > Pourquoi les constructeurs hérités en C nécessitent-ils une définition explicite avant C 11 ?

Pourquoi les constructeurs hérités en C nécessitent-ils une définition explicite avant C 11 ?

DDD
Libérer: 2025-01-03 12:49:39
original
320 Les gens l'ont consulté

Why Do Inherited Constructors in C   Require Explicit Definition Before C  11?

Hériter des constructeurs : comprendre les règles d'erreur et d'héritage

Lorsque vous tentez d'hériter d'un constructeur d'une classe de base sans le redéfinir explicitement dans le dérivé classe, comme illustré dans l'extrait de code fourni, pourquoi cela entraîne-t-il une erreur de compilation ?

En C , avant C 11, les constructeurs n'étaient pas hérités par les classes dérivées. Pour exécuter le constructeur de la classe de base, il devait être explicitement appelé dans le constructeur de la classe dérivée. C'est pourquoi le message d'erreur suivant s'affiche dans le code donné :

main.cpp:13: error: no matching function for call to ‘B::B(int)’
main.cpp:8: note: candidates are: B::B()
main.cpp:8: note:                 B::B(const B&)
Copier après la connexion

Pour hériter des constructeurs en C 11 et versions ultérieures, le mot-clé using est introduit. Ce mot-clé peut être utilisé pour hériter collectivement de tous les constructeurs de la classe de base.

class A
{
public:
    explicit A(int x) {}
};

class B: public A
{
    using A::A; // Inherits all constructors of A
};
Copier après la connexion

Cette approche vous permet d'hériter de tous les constructeurs de la classe de base dans une seule ligne de code. Cependant, il est important de noter que l'héritage sélectif de certains constructeurs n'est pas possible avec cette méthode. Pour obtenir un héritage sélectif, vous devez écrire manuellement des constructeurs individuels dans la classe dérivée, en appelant le constructeur de la classe de base si nécessaire.

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal