Maison >développement back-end >C++ >Comment le chaînage des constructeurs en C se compare-t-il à l'implémentation de C# ?
Chaînage de constructeurs en C : une comparaison avec C#
En C#, les constructeurs peuvent être chaînés entre eux pour initialiser les objets de manière incrémentale. En tant que développeur C#, vous vous demandez peut-être si un mécanisme similaire existe en C .
Dans l'extrait de code C# fourni :
class Test { public Test() { DoSomething(); } public Test(int count) : this() { DoSomethingWithCount(count); } public Test(int count, string name) : this(count) { DoSomethingWithName(name); } }
Chaque constructeur invoque son prédécesseur, permettant l'initialisation séquentielle d'un l'état de l'objet.
C 11 et À partir de
C 11 a introduit une fonctionnalité connue sous le nom de constructeurs délégués qui fournit une fonctionnalité similaire au chaînage de constructeurs en C#.
class Foo { public: Foo(char x, int y); Foo(int y) : Foo('a', y) {}; };
Dans cet exemple, le constructeur Foo(int y) délègue l'initialisation au constructeur Foo(char x, int y) avec des valeurs spécifiques pour x et y.
C 03
C 03 ne prend pas directement en charge le chaînage de constructeurs. Cependant, il existe deux méthodes de contournement :
class Foo { public: Foo(char x, int y=0); // combines two constructors (char) and (char, int) // ... };
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) { // ... }
Pour C 03, la technique de la méthode init est généralement préférée en raison de sa flexibilité et de ses avantages potentiels en termes de performances par rapport à l'utilisation des paramètres par défaut.
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!