我有这些类:C++多态性与默认参数
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();
我的输出为 “X = 0” 时,即使FOO称为衍生自,但是当我有:
Derived* bar = new Derived();
bar->foo();
我的输出为 “X = 1”。这种行为是否正确? (要从声明类型中选择默认参数值,而不是从实际对象类型中选择它)。这是否打破C++多态性?
它会导致很多问题,如果有人使用虚拟功能,而无需指定的实际功能参数,并使用该函数的默认参数。即使你重载函数
装上去中的printf()这实际上告诉你哪个函数被调用 – Ferruccio 2011-03-11 13:00:42
很明显,被调用的功能派生:: foo的 – Felics 2011-03-11 13:01:14
如何?他们都打印出像“X = value”的东西。您不能使用该值来确定哪个被调用。试着在底部打印“Base:X =%d”,你就可以知道哪一个被调用。 – Ferruccio 2011-03-11 13:10:10