Maison >développement back-end >C++ >Les constructeurs C peuvent-ils être chaînés, et si oui, comment ?

Les constructeurs C peuvent-ils être chaînés, et si oui, comment ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-21 02:58:13270parcourir

Can C   Constructors Be Chained, and If So, How?

Le chaînage de constructeurs peut-il être effectué en C ?

En C#, la possibilité d'appeler des constructeurs dans un ordre spécifique est une pratique courante. En tant que développeur C# cherchant à reproduire cette fonctionnalité en C, la question se pose : peut-elle être obtenue grâce au chaînage de constructeurs ?

C 11 et versions ultérieures

Réjouissez-vous ! C 11 introduit une fonctionnalité connue sous le nom de constructeurs délégués qui imite le chaînage des constructeurs vu en C#. Voici comment cela s'écrit :

class Foo {
public:
  Foo(char x, int y) {}
  Foo(int y) : Foo('a', y) {}
};

C 03 : Une approche différente

Malgré l'absence de chaînage direct des constructeurs en C 03, deux solutions de contournement existent :

Paramètres par défaut : Combinez les constructeurs en utilisant la valeur par défaut paramètres.

class Foo {
public:
  Foo(char x, int y=0); // Combines two constructors (char) and (char, int)
};

Méthode d'initialisation : Utiliser une méthode d'initialisation partagée.

class Foo {
public:
  Foo(char x);
  Foo(char x, int y);

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

Foo::Foo(char x) : init(x, int(x) + 7) {}
Foo::Foo(char x, int y) : init(x, y) {}

void Foo::init(char x, int y) {}

En conclusion, C 11 permet un véritable chaînage de constructeurs, tandis que C 03 propose des solutions de contournement. comme les paramètres par défaut et les méthodes d'initialisation pour obtenir des fonctionnalités similaires.

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