知识点:C++中虚函数是动态绑定的,但函数的缺省参数确实在编译时就静态绑定的。
若在虚函数中,指定了形参的缺省参数值,这意味着最终执行的函数是一个定义在派生类,但使用了基类的缺省参数值的虚函数。
比如下面这段代码:
#include <iostream>
using namespace std;
class base {
public:
virtual void Display1() {
cout << "Base: Display1" << endl;
}
virtual void Display2(const int x = 1) {
cout << "Base: Display2: " << x << endl;
}
};
class derived : public base {
public:
virtual void Display1() {
cout << "Derived: Display1" << endl;
}
virtual void Display2(const int x = 2) {
cout << "Derived: Display2: " << x << endl;
}
};
int main()
{
base *pBase = new derived;
pBase->Display1(); // 实现多态
pBase->Display2(); // 未实现多态
delete pBase;
pBase = nullptr;
return 0;
}运行结果如下:
可以看出,Display1()调用了派生类的函数,实现了多态;而Display2()虽然调用了派生类的函数,但却使用了基类的缺省参数值,未能完全实现多态。


/1 
