假设我有两个C++类:
如果我写下以下代码:
可能有人会期望
事实证明,
class A
{
public:
A() { fn(); }
virtual void fn() { _n = 1; }
int getn() { return _n; }
protected:
int _n;
};
class B : public A
{
public:
B() : A() {}
virtual void fn() { _n = 2; }
};
如果我写下以下代码:
int main()
{
B b;
int n = b.getn();
}
可能有人会期望
n
被设为2。事实证明,
n
被设为1。为什么呢?