Heim >Backend-Entwicklung >C++ >Wie verhält sich die Konstruktorverkettung in C im Vergleich zur C#-Implementierung?
Konstruktorverkettung in C: Ein Vergleich mit C#
In C# können Konstruktoren miteinander verkettet werden, um Objekte inkrementell zu initialisieren. Als C#-Entwickler fragen Sie sich vielleicht, ob ein ähnlicher Mechanismus in C existiert.
Im bereitgestellten C#-Codeausschnitt:
class Test { public Test() { DoSomething(); } public Test(int count) : this() { DoSomethingWithCount(count); } public Test(int count, string name) : this(count) { DoSomethingWithName(name); } }
Jeder Konstruktor ruft seinen Vorgänger auf und ermöglicht so die sequentielle Initialisierung eines Zustand des Objekts.
C 11 und Ab
C 11 führte eine Funktion namens „Delegieren von Konstruktoren“ ein, die eine ähnliche Funktionalität wie die Konstruktorverkettung in C# bietet.
class Foo { public: Foo(char x, int y); Foo(int y) : Foo('a', y) {}; };
In diesem Beispiel der Foo(int y)-Konstruktor delegiert die Initialisierung an den Foo(char x, int y)-Konstruktor mit spezifischen Werten für x und y.
C 03
C 03 unterstützt die Konstruktorverkettung nicht direkt. Es gibt jedoch zwei Umgehungsmethoden:
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) { // ... }
Für C 03 wird im Allgemeinen die Init-Methodentechnik aufgrund ihrer Flexibilität und potenziellen Leistungsvorteile gegenüber der Verwendung von Standardparametern bevorzugt.
Das obige ist der detaillierte Inhalt vonWie verhält sich die Konstruktorverkettung in C im Vergleich zur C#-Implementierung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!