【发布时间】:2015-03-27 04:13:57
【问题描述】:
在阅读 vptr 和 vtable 概念时,我得到了这段精彩的代码,但我无法弄清楚这里涉及的概念:
#include <iostream>
using namespace std;
class A
{
public:
virtual void foo(int x = 10)
{
cout << "base x : " << x << "\n";
}
virtual void bar()
{
cout << "base bar\n";
}
};
class B : public A
{
public:
virtual void foo(int x = 20)
{
cout << "derived x : " << x << "\n";
}
private:
virtual void bar()
{
cout << "derived bar\n";
}
};
class C : public B
{
};
int main()
{
A x; x.foo(); // x.foo(10);
B y; y.foo(); // x.foo(20);
A *p(&y);
p->foo();
}
现在我得到的输出是:
base x : 10
derived x : 20
derived x : 10
怎么可能即使在打印派生 x(即 B::foo()) 时,默认参数也是基函数的默认参数(即 A::foo())?
【问题讨论】:
-
你看到this了吗?
标签: c++ overriding virtual-functions late-binding default-arguments