C++ 中的預設引數和虛擬函式


讓我們來看一個 C++ 中的示例程式,以便輕鬆理解這個概念 −

示例程式碼

#include<iostream>
using namespace std;
class B {
   public:
      virtual void s(int a = 0) {
         cout<<" In Base \n";
      }
};
class D: public B {
   public:
      virtual void s(int a) {
         cout<<"In Derived, a="<<a;
      }
};
int main(void) {
   D d; // An object of class D
   B *b= &d;// A pointer of type B* pointing to d
   b->s();// prints"D::s() called"
   return 0;
}

輸出

In Derived, a = 0

在這個輸出中,我們觀察到,匯出的類的 s() 已被呼叫,並且使用了基本類的 s() 的預設值。

預設引數不參與函式簽名。因此,基本類和匯出類中的 s() 的簽名被視為相同,因此基本類的 s() 被覆蓋。預設值在編譯時使用。當編譯器檢查到函式呼叫中缺少一個引數時,它會替換給定的預設值。因此,在上述程式中,x 的值在編譯時被替換,並且在執行時,匯出類的 s() 被呼叫。a 的值在編譯時被替換,並且在執行時,匯出類的 s() 被呼叫。

更新於: 2019 年 7 月 30 日

231 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.