繼承建構子:了解錯誤與繼承規則
嘗試從基底類別繼承建構子而不在衍生類別中明確重新定義它時類,如提供的程式碼片段所示,為什麼會導致編譯錯誤?
中C ,在 C 11 之前,建構子不會被衍生類別繼承。要執行基底類別的建構函數,必須在衍生類別的建構函數中明確地呼叫它。這就是為什麼給定程式碼中顯示以下錯誤訊息的原因:
main.cpp:13: error: no matching function for call to ‘B::B(int)’ main.cpp:8: note: candidates are: B::B() main.cpp:8: note: B::B(const B&)
為了繼承 C 11 及更高版本中的建構函數,引入了 using 關鍵字。此關鍵字可用於集體繼承基底類別的所有建構子。
class A { public: explicit A(int x) {} }; class B: public A { using A::A; // Inherits all constructors of A };
這種方法允許您透過一行程式碼繼承基底類別的所有建構子。但是,需要注意的是,使用此方法無法選擇性繼承某些建構子。要實現選擇性繼承,必須在衍生類別中手動編寫單獨的建構函數,根據需要呼叫基底類別建構函數。
以上是為什麼 C 中的繼承建構子需要在 C 11 之前明確定義?的詳細內容。更多資訊請關注PHP中文網其他相關文章!