C++虚函数默认实参的注意事项
我们都知道当成员函数是虚函数的时候,函数调用取决于调用函数的对象的类型而不是指针或者应用的类型。这就是C++中的多态。
那么一个虚函数的实参的缺省值是什么呢?例如如下代码:
#include <iostream> #include <string> using namespace std; class A { public: virtual void func(int number = 10) { cout << "A::func() " << number << endl; } }; class B : public A { public: virtual void func(int number = 20) { cout << "B::func() " << number << endl; } }; int main(int argc, char **argv) { B b; A &a = b; b.func(); b.func(99); a.func(); a.func(99); return 0; }
运行结果是:
B::func() 20 B::func() 99 B::func() 10 B::func() 99
由上面的运行结果我们可以得到,即使动态调用了子类的 func() 函数,那么函数的缺省值仍然还是基类中定义的缺省值 10;
由此可见,虚函数的缺省值取决于调用函数的指针或者引用的类型而不是对象本身的类型。