C 中的建構子連結:與C# 的比較
在C# 中,建構子可以連結在一起以增量初始化物件。身為 C# 開發人員,您可能想知道 C 中是否有類似的機制。
在提供的 C# 程式碼片段中:
class Test { public Test() { DoSomething(); } public Test(int count) : this() { DoSomethingWithCount(count); } public Test(int count, string name) : this(count) { DoSomethingWithName(name); } }
每個建構函數都會呼叫其前一個建構函數,從而允許順序初始化物件的狀態。
C 11 和以後
C 11 引入了一項稱為委託構造函數的功能,它提供了與 C# 中的構造函數鏈類似的功能。
class Foo { public: Foo(char x, int y); Foo(int y) : Foo('a', y) {}; };
在此範例中,Foo(int y) 建構子將初始化委託給Foo(char x, int y) 建構函數,其中x 和具有特定值y.
C 03
C 03 不直接支援建構函式鏈。但是,有兩種解決方法:
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) { // ... }
對於 C 03,init 方法技術通常是首選,因為它比使用預設參數具有靈活性和潛在的效能優勢。
以上是C 中的建構子連結與 C# 的實作相比如何?的詳細內容。更多資訊請關注PHP中文網其他相關文章!