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