Maison > développement back-end > C++ > Comment puis-je implémenter le chaînage de constructeurs en C ?

Comment puis-je implémenter le chaînage de constructeurs en C ?

Linda Hamilton
Libérer: 2025-01-02 17:30:39
original
826 Les gens l'ont consulté

How Can I Implement Constructor Chaining in C  ?

Puis-je tirer parti du chaînage de constructeurs en C ?

Le chaînage de constructeurs, un concept familier aux développeurs C#, permet l'exécution d'un constructeur à partir de un autre. Cela fournit un moyen efficace d'initialiser des objets dans une classe parent et ses classes dérivées.

C 11 et au-delà : chaînage de constructeurs

Dans C 11 et versions ultérieures, le constructeur le chaînage est pris en charge via la délégation de constructeurs. La syntaxe s'écarte légèrement de C# :

class Foo {
public:
  Foo(char x, int y) {}
  Foo(int y) : Foo('a', y) {}
};
Copier après la connexion

Ce code définit deux constructeurs : un qui prend (char x, int y) et un autre qui prend (int y). Le deuxième constructeur appelle le premier constructeur en utilisant le pointeur this pour initialiser x à 'a'.

C 03 : Simulation de constructeur

Malheureusement, C 03 ne prend pas en charge nativement chaînage des constructeurs. Cependant, deux méthodes peuvent simuler son effet :

  • Paramètres par défaut : Combinez plusieurs constructeurs à l'aide des paramètres par défaut.
class Foo {
public:
  Foo(char x, int y = 0); // This combines (char) and (char, int) constructors.
};
Copier après la connexion
  • Méthode d'initialisation : Partagez le code commun via une initialisation méthode.
class Foo {
public:
  Foo(char x);
  Foo(char x, int y);

private:
  void init(char x, int y);
};

Foo::Foo(char x) : Foo(x, int(x) + 7) {} // Calls init(x, int(x) + 7).

Foo::Foo(char x, int y) : Foo(x, y) {} // Calls init(x, y).

void Foo::init(char x, int y) {}
Copier après la connexion

En référençant la FAQ C pour plus de conseils, vous pouvez simuler efficacement le chaînage de constructeurs en C 03 à l'aide de ces méthodes.

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
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