int x = 0; class A { public: virtual int value(int x = 1) { return x; } }; class B:public A { public: virtual int value(int x = 2) { return x; } };
我们预期输出的结果是2,但是实际输出是1。那是因为虽然函数是动态绑定的,但是缺省参数不是。因为如果缺省参数是动态绑定,编译器就必须有某种办法在运行期为virtual函数决定适当的参数缺省值。影响效率,所以编译器索性不干。所以缺省参数都是静态绑定的。
class A { public: int Value(int x = 1) { return value(x); } private: virtual int value(int x) { return x; } }; class B:public A { public: int Value(int x = 2) { return value(x); } private: virtual int value(int x) { return x; } };
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?