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
Linda Hamiltonoriginal
2025-01-02 17:30:39827parcourir

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) {}
};

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.
};
  • 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) {}

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