class A
{
public:
virtual void func(int val=1)
{
std::cout<<"A->"<<val<<std:endl;
}
virtual void test()
{
func();
}
};
class B : public A
{
public:
void func(int val=0)
{
std::cout<<"B->"<<val<<std::endl;
}
};
int main()
{
A *p1=new B;
B *p2=new B;
p1->func(); //B->1
p1->text(); //B->1
p2->func(); //B->0
<strong>p2->text(); //B->1(雖然p2的靜態類型是B*,但是調用text()後,用A*調用func())</strong>
return 0;
}
重點:缺省參數值是靜態綁定的,絕不重新定義繼承而來的缺省參數值。