首頁 > 後端開發 > C++ > 為什麼 C 中的繼承建構子需要在 C 11 之前明確定義?

為什麼 C 中的繼承建構子需要在 C 11 之前明確定義?

DDD
發布: 2025-01-03 12:49:39
原創
309 人瀏覽過

Why Do Inherited Constructors in C   Require Explicit Definition Before C  11?

繼承建構子:了解錯誤與繼承規則

嘗試從基底類別繼承建構子而不在衍生類別中明確重新定義它時類,如提供的程式碼片段所示,為什麼會導致編譯錯誤?

中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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板