C++中使用对象和使用指针调用虚函数时对缺省参数的处理
#include <iostream>
using namespace std;
class B
{
public:
virtual void fun(int nNoUse=0) const=0;
};
class D1:public B
{
public:
virtual void fun(int nNoUse=1) const{cout<<nNoUse<<endl;}
};
class D2:public B
{
public:
virtual void fun(int nNoUse) const{cout<<nNoUse<<endl;}
};
int main()
{
D1 d1;
D2 d2;
B* b1=&d1;
B* b2=&d2;
D1 *d11=&d1;
D2 *d22=&d2;
D1 &d111=d1;
D2 &d222=d2;
d1.fun();
// d2.fun(); //error 需要传递参数
b1->fun();
b2->fun();
d11->fun();
// d22->fun(); //error 需要传递参数
d111.fun();
// d222.fun(); //error 需要传递参数
return 0;
}
解释:
使用对象调用时,是静态绑定,函数并不从base继承缺省参数值.
而使用指针或引用时,是动态绑定,函数从base继承缺省参数值