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() 被呼叫。
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP