我有以下这些类:
class Base
{
public:
virtual void foo(int x = 0)
{
printf("X = %d", x);
}
};
class Derived : public Base
{
public:
virtual void foo(int x = 1)
{
printf("X = %d", x);
}
};
当我有:
Base* bar = new Derived();
bar->foo();
即使从Derived中调用foo,我的输出结果仍然是“X = 0”,但当我有以下代码时:
Derived* bar = new Derived();
bar->foo();
我的输出结果是"X = 1",这个行为是否正确?(从声明类型中选择默认参数值,而不是从实际对象类型中选择)。这会破坏C++的多态性吗?如果有人在没有指定实际函数参数的情况下使用虚函数并使用函数的默认参数,这可能会引起很多问题。