首頁 > 後端開發 > C++ > 虛函數中的預設參數會繼承到衍生類別嗎?

虛函數中的預設參數會繼承到衍生類別嗎?

Barbara Streisand
發布: 2024-11-26 14:15:11
原創
168 人瀏覽過

Do Default Parameters in Virtual Functions Inherit to Derived Classes?

虛函數可以有預設參數嗎?

問題:

宣告虛函數時基底類別中帶有預設參數,衍生類別是否繼承這些參數預設值?

答案:

不,虛函數中的預設值不會被衍生類別繼承。使用的預設值由呼叫函數時物件的靜態類型決定。

說明:

C 標準(C 03 和C 11)指定虛函數呼叫使用在函數定義中聲明的預設參數,該參數由用於呼叫該函數的指標或引用的靜態型別決定。

範例:

考慮以下程式碼:

struct Base {
  virtual void f(int a = 7);
};
struct Der : public Base {
  void f(int a);
};
登入後複製

透過指向Base 物件的指標呼叫f() 時,預設值7 會被使用:

Base* pb = new Base;
pb->f(); // uses the default 7
登入後複製

但是,當透過指標呼叫f() 時Der對象,將不會使用衍生類別的預設值:

Der* pd = new Der;
pd->f(); // error: no default argument for this function
登入後複製

實踐和編譯器注意事項:

雖然C 標準規定了行為,但某些編譯器可能會以不同的方式實作虛擬函數預設參數。但是,建議遵循標準的指南,以確保跨編譯器的行為一致。

程式碼示範:

以下程式碼示範了預設參數行為:

struct Base { virtual string Speak(int n = 42); };
struct Der : public Base { string Speak(int n = 84); };

int main()
{
    Base b1;
    Der d1;

    Base *pb1 = &b1, *pb2 = &d1;
    Der *pd1 = &d1;
    cout << pb1->Speak() << "\n" // Base 42
         << pb2->Speak() << "\n" // Der 42
         << pd1->Speak() << "\n" // Der 84
         << endl;
}
登入後複製

輸出:

Base 42
Der 42
Der 84
登入後複製

以上是虛函數中的預設參數會繼承到衍生類別嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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